History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/com/sun/crypto/provider/BlockCipherParamsCore.java (1 of 18352 files). Show all

Unified · Split

java/pkg/com/sun/crypto/provider/BlockCipherParamsCore.java+127−0
@@ -0,0 +1,127 @@
1/*
2 * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package com.sun.crypto.provider;
27
28import java.util.*;
29import java.io.*;
30import sun.security.util.*;
31import sun.misc.HexDumpEncoder;
32import java.security.spec.AlgorithmParameterSpec;
33import java.security.spec.InvalidParameterSpecException;
34import javax.crypto.spec.IvParameterSpec;
35
36/**
37 * This class implements the parameter (IV) used with Block Ciphers
38 * in feedback-mode. IV is defined in the standards as follows:
39 *
40 * <pre>
41 * IV ::= OCTET STRING -- length depends on the block size of the
42 * block ciphers
43 * </pre>
44 *
45 * @author Valerie Peng
46 *
47 */
48final class BlockCipherParamsCore {
49 private int block_size = 0;
50 private byte[] iv = null;
51
52 BlockCipherParamsCore(int blksize) {
53 block_size = blksize;
54 }
55
56 void init(AlgorithmParameterSpec paramSpec)
57 throws InvalidParameterSpecException {
58 if (!(paramSpec instanceof IvParameterSpec)) {
59 throw new InvalidParameterSpecException
60 ("Inappropriate parameter specification");
61 }
62 byte[] tmpIv = ((IvParameterSpec)paramSpec).getIV();
63 if (tmpIv.length != block_size) {
64 throw new InvalidParameterSpecException("IV not " +
65 block_size + " bytes long");
66 }
67 iv = (byte[]) tmpIv.clone();
68 }
69
70 void init(byte[] encoded) throws IOException {
71 DerInputStream der = new DerInputStream(encoded);
72
73 byte[] tmpIv = der.getOctetString();
74 if (der.available() != 0) {
75 throw new IOException("IV parsing error: extra data");
76 }
77 if (tmpIv.length != block_size) {
78 throw new IOException("IV not " + block_size +
79 " bytes long");
80 }
81 iv = tmpIv;
82 }
83
84 void init(byte[] encoded, String decodingMethod)
85 throws IOException {
86 if ((decodingMethod != null) &&
87 (!decodingMethod.equalsIgnoreCase("ASN.1"))) {
88 throw new IllegalArgumentException("Only support ASN.1 format");
89 }
90 init(encoded);
91 }
92
93 AlgorithmParameterSpec getParameterSpec(Class paramSpec)
94 throws InvalidParameterSpecException
95 {
96 if (IvParameterSpec.class.isAssignableFrom(paramSpec)) {
97 return new IvParameterSpec(this.iv);
98 } else {
99 throw new InvalidParameterSpecException
100 ("Inappropriate parameter specification");
101 }
102 }
103
104 byte[] getEncoded() throws IOException {
105 DerOutputStream out = new DerOutputStream();
106 out.putOctetString(this.iv);
107 return out.toByteArray();
108 }
109
110 byte[] getEncoded(String encodingMethod)
111 throws IOException {
112 return getEncoded();
113 }
114
115 /*
116 * Returns a formatted string describing the parameters.
117 */
118 public String toString() {
119 String LINE_SEP = System.getProperty("line.separator");
120
121 String ivString = LINE_SEP + " iv:" + LINE_SEP + "[";
122 HexDumpEncoder encoder = new HexDumpEncoder();
123 ivString += encoder.encodeBuffer(this.iv);
124 ivString += "]" + LINE_SEP;
125 return ivString;
126 }
127}