116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropackage org.bouncycastle.asn1.pkcs; 216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport java.math.BigInteger; 416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1EncodableVector; 616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Integer; 716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Object; 816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1OctetString; 916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Primitive; 1016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Sequence; 1116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.DEROctetString; 1216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.DERSequence; 1316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.x509.DigestInfo; 144caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giroimport org.bouncycastle.util.Arrays; 1516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 1616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropublic class MacData 1716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro extends ASN1Object 1816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro{ 1916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private static final BigInteger ONE = BigInteger.valueOf(1); 2016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 2116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DigestInfo digInfo; 2216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro byte[] salt; 2316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro BigInteger iterationCount; 2416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 2516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public static MacData getInstance( 2616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro Object obj) 2716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 2816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (obj instanceof MacData) 2916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 3016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return (MacData)obj; 3116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 3216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro else if (obj != null) 3316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 3416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new MacData(ASN1Sequence.getInstance(obj)); 3516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 3616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 3716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return null; 3816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 3916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 4016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private MacData( 4116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro ASN1Sequence seq) 4216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 4316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.digInfo = DigestInfo.getInstance(seq.getObjectAt(0)); 4416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 454caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro this.salt = Arrays.clone(((ASN1OctetString)seq.getObjectAt(1)).getOctets()); 4616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 4716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (seq.size() == 3) 4816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 4916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.iterationCount = ((ASN1Integer)seq.getObjectAt(2)).getValue(); 5016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 5116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro else 5216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 5316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.iterationCount = ONE; 5416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 5516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 5616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 5716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public MacData( 5816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DigestInfo digInfo, 5916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro byte[] salt, 6016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro int iterationCount) 6116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 6216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.digInfo = digInfo; 634caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro this.salt = Arrays.clone(salt); 6416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.iterationCount = BigInteger.valueOf(iterationCount); 6516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 6616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 6716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public DigestInfo getMac() 6816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 6916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return digInfo; 7016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 7116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 7216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public byte[] getSalt() 7316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 744caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro return Arrays.clone(salt); 7516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 7616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 7716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public BigInteger getIterationCount() 7816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 7916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return iterationCount; 8016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 8116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 8216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 8316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * <pre> 8416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * MacData ::= SEQUENCE { 8516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * mac DigestInfo, 8616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * macSalt OCTET STRING, 8716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * iterations INTEGER DEFAULT 1 8816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * -- Note: The default is for historic reasons and its use is deprecated. A 8916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * -- higher value, like 1024 is recommended. 9016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * </pre> 9116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * @return the basic ASN1Primitive construction. 9216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 9316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ASN1Primitive toASN1Primitive() 9416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 9516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro ASN1EncodableVector v = new ASN1EncodableVector(); 9616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 9716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro v.add(digInfo); 9816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro v.add(new DEROctetString(salt)); 9916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 10016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (!iterationCount.equals(ONE)) 10116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 10216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro v.add(new ASN1Integer(iterationCount)); 10316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 10416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 10516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new DERSequence(v); 10616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 10716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro} 108