• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.bouncycastle.jcajce.provider.symmetric.util;
2 
3 import java.io.IOException;
4 import java.security.spec.AlgorithmParameterSpec;
5 import java.security.spec.InvalidParameterSpecException;
6 
7 import javax.crypto.spec.IvParameterSpec;
8 
9 import org.bouncycastle.asn1.ASN1OctetString;
10 import org.bouncycastle.asn1.ASN1Primitive;
11 import org.bouncycastle.asn1.DEROctetString;
12 import org.bouncycastle.util.Arrays;
13 
14 public class IvAlgorithmParameters
15     extends BaseAlgorithmParameters
16 {
17     private byte[] iv;
18 
engineGetEncoded()19     protected byte[] engineGetEncoded()
20         throws IOException
21     {
22         return engineGetEncoded("ASN.1");
23     }
24 
engineGetEncoded( String format)25     protected byte[] engineGetEncoded(
26         String format)
27         throws IOException
28     {
29         if (isASN1FormatString(format))
30         {
31             return new DEROctetString(engineGetEncoded("RAW")).getEncoded();
32         }
33 
34         if (format.equals("RAW"))
35         {
36             return Arrays.clone(iv);
37         }
38 
39         return null;
40     }
41 
localEngineGetParameterSpec( Class paramSpec)42     protected AlgorithmParameterSpec localEngineGetParameterSpec(
43         Class paramSpec)
44         throws InvalidParameterSpecException
45     {
46         if (paramSpec == IvParameterSpec.class)
47         {
48             return new IvParameterSpec(iv);
49         }
50 
51         throw new InvalidParameterSpecException("unknown parameter spec passed to IV parameters object.");
52     }
53 
engineInit( AlgorithmParameterSpec paramSpec)54     protected void engineInit(
55         AlgorithmParameterSpec paramSpec)
56         throws InvalidParameterSpecException
57     {
58         if (!(paramSpec instanceof IvParameterSpec))
59         {
60             throw new InvalidParameterSpecException("IvParameterSpec required to initialise a IV parameters algorithm parameters object");
61         }
62 
63         this.iv = ((IvParameterSpec)paramSpec).getIV();
64     }
65 
engineInit( byte[] params)66     protected void engineInit(
67         byte[] params)
68         throws IOException
69     {
70         //
71         // check that we don't have a DER encoded octet string
72         //
73         if ((params.length % 8) != 0
74             && params[0] == 0x04 && params[1] == params.length - 2)
75         {
76             ASN1OctetString oct = (ASN1OctetString)ASN1Primitive.fromByteArray(params);
77 
78             params = oct.getOctets();
79         }
80 
81         this.iv = Arrays.clone(params);
82     }
83 
engineInit( byte[] params, String format)84     protected void engineInit(
85         byte[] params,
86         String format)
87         throws IOException
88     {
89         if (isASN1FormatString(format))
90         {
91             try
92             {
93                 ASN1OctetString oct = (ASN1OctetString)ASN1Primitive.fromByteArray(params);
94 
95                 engineInit(oct.getOctets());
96             }
97             catch (Exception e)
98             {
99                 throw new IOException("Exception decoding: " + e);
100             }
101 
102             return;
103         }
104 
105         if (format.equals("RAW"))
106         {
107             engineInit(params);
108             return;
109         }
110 
111         throw new IOException("Unknown parameters format in IV parameters object");
112     }
113 
engineToString()114     protected String engineToString()
115     {
116         return "IV Parameters";
117     }
118 }
119