001package org.apache.commons.ssl.org.bouncycastle.asn1.crmf; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 008import org.apache.commons.ssl.org.bouncycastle.asn1.DERBitString; 009import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 010import org.apache.commons.ssl.org.bouncycastle.asn1.cmp.CMPObjectIdentifiers; 011import org.apache.commons.ssl.org.bouncycastle.asn1.cmp.PBMParameter; 012import org.apache.commons.ssl.org.bouncycastle.asn1.x509.AlgorithmIdentifier; 013 014/** 015 * Password-based MAC value for use with POPOSigningKeyInput. 016 */ 017public class PKMACValue 018 extends ASN1Object 019{ 020 private AlgorithmIdentifier algId; 021 private DERBitString value; 022 023 private PKMACValue(ASN1Sequence seq) 024 { 025 algId = AlgorithmIdentifier.getInstance(seq.getObjectAt(0)); 026 value = DERBitString.getInstance(seq.getObjectAt(1)); 027 } 028 029 public static PKMACValue getInstance(Object o) 030 { 031 if (o instanceof PKMACValue) 032 { 033 return (PKMACValue)o; 034 } 035 036 if (o != null) 037 { 038 return new PKMACValue(ASN1Sequence.getInstance(o)); 039 } 040 041 return null; 042 } 043 044 public static PKMACValue getInstance(ASN1TaggedObject obj, boolean isExplicit) 045 { 046 return getInstance(ASN1Sequence.getInstance(obj, isExplicit)); 047 } 048 049 /** 050 * Creates a new PKMACValue. 051 * @param params parameters for password-based MAC 052 * @param value MAC of the DER-encoded SubjectPublicKeyInfo 053 */ 054 public PKMACValue( 055 PBMParameter params, 056 DERBitString value) 057 { 058 this(new AlgorithmIdentifier( 059 CMPObjectIdentifiers.passwordBasedMac, params), value); 060 } 061 062 /** 063 * Creates a new PKMACValue. 064 * @param aid CMPObjectIdentifiers.passwordBasedMAC, with PBMParameter 065 * @param value MAC of the DER-encoded SubjectPublicKeyInfo 066 */ 067 public PKMACValue( 068 AlgorithmIdentifier aid, 069 DERBitString value) 070 { 071 this.algId = aid; 072 this.value = value; 073 } 074 075 public AlgorithmIdentifier getAlgId() 076 { 077 return algId; 078 } 079 080 public DERBitString getValue() 081 { 082 return value; 083 } 084 085 /** 086 * <pre> 087 * PKMACValue ::= SEQUENCE { 088 * algId AlgorithmIdentifier, 089 * -- algorithm value shall be PasswordBasedMac 1.2.840.113533.7.66.13 090 * -- parameter value is PBMParameter 091 * value BIT STRING } 092 * </pre> 093 * @return a basic ASN.1 object representation. 094 */ 095 public ASN1Primitive toASN1Primitive() 096 { 097 ASN1EncodableVector v = new ASN1EncodableVector(); 098 099 v.add(algId); 100 v.add(value); 101 102 return new DERSequence(v); 103 } 104}