1package org.bouncycastle.asn1.pkcs; 2 3import java.math.BigInteger; 4 5import org.bouncycastle.asn1.ASN1EncodableVector; 6import org.bouncycastle.asn1.ASN1Integer; 7import org.bouncycastle.asn1.ASN1Object; 8import org.bouncycastle.asn1.ASN1OctetString; 9import org.bouncycastle.asn1.ASN1Primitive; 10import org.bouncycastle.asn1.ASN1Sequence; 11import org.bouncycastle.asn1.DEROctetString; 12import org.bouncycastle.asn1.DERSequence; 13 14public class PBEParameter 15 extends ASN1Object 16{ 17 ASN1Integer 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 ASN1Integer(iterations); 30 } 31 32 private PBEParameter( 33 ASN1Sequence seq) 34 { 35 salt = (ASN1OctetString)seq.getObjectAt(0); 36 iterations = (ASN1Integer)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 != null) 47 { 48 return new PBEParameter(ASN1Sequence.getInstance(obj)); 49 } 50 51 return null; 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 ASN1Primitive toASN1Primitive() 65 { 66 ASN1EncodableVector v = new ASN1EncodableVector(); 67 68 v.add(salt); 69 v.add(iterations); 70 71 return new DERSequence(v); 72 } 73} 74