1 package org.bouncycastle.asn1.pkcs; 2 3 import java.math.BigInteger; 4 5 import org.bouncycastle.asn1.ASN1Encodable; 6 import org.bouncycastle.asn1.ASN1EncodableVector; 7 import org.bouncycastle.asn1.ASN1OctetString; 8 import org.bouncycastle.asn1.ASN1Sequence; 9 import org.bouncycastle.asn1.DERInteger; 10 import org.bouncycastle.asn1.DERObject; 11 import org.bouncycastle.asn1.DEROctetString; 12 import org.bouncycastle.asn1.DERSequence; 13 14 public class PBEParameter 15 extends ASN1Encodable 16 { 17 DERInteger iterations; 18 ASN1OctetString salt; 19 20 public PBEParameter( 21 byte[] salt, 22 int iterations) 23 { 24 if (salt.length != 8) 25 { 26 throw new IllegalArgumentException("salt length must be 8"); 27 } 28 this.salt = new DEROctetString(salt); 29 this.iterations = new DERInteger(iterations); 30 } 31 32 public PBEParameter( 33 ASN1Sequence seq) 34 { 35 salt = (ASN1OctetString)seq.getObjectAt(0); 36 iterations = (DERInteger)seq.getObjectAt(1); 37 } 38 39 public static PBEParameter getInstance( 40 Object obj) 41 { 42 if (obj instanceof PBEParameter) 43 { 44 return (PBEParameter)obj; 45 } 46 else if (obj instanceof ASN1Sequence) 47 { 48 return new PBEParameter((ASN1Sequence)obj); 49 } 50 51 throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); 52 } 53 54 public BigInteger getIterationCount() 55 { 56 return iterations.getValue(); 57 } 58 59 public byte[] getSalt() 60 { 61 return salt.getOctets(); 62 } 63 64 public DERObject toASN1Object() 65 { 66 ASN1EncodableVector v = new ASN1EncodableVector(); 67 68 v.add(salt); 69 v.add(iterations); 70 71 return new DERSequence(v); 72 } 73 }