예제 #1
0
 public DistributionPointName(
     int type,
     ASN1Encodable name)
 {
     this.type = type;
     this.name = name;
 }
예제 #2
0
 public SMIMECapability(
     DERObjectIdentifier capabilityID,
     ASN1Encodable parameters)
 {
     this.capabilityID = capabilityID;
     this.parameters   = parameters;
 }
예제 #3
0
 public SubjectPublicKeyInfo(
     AlgorithmIdentifier algId,
     ASN1Encodable publicKey)
 {
     this.keyData = new DERBitString(publicKey);
     this.algId   = algId;
 }
예제 #4
0
 public static CipherParameters generateCipherParameters(
     DERObjectIdentifier algorithmOID,
     char[]              password,
     ASN1Encodable pbeParameters)
 {
     return(generateCipherParameters(algorithmOID.getId(), password, pbeParameters));
 }
예제 #5
0
 public OtherKeyAttribute(
     DERObjectIdentifier keyAttrId,
     ASN1Encodable keyAttr)
 {
     this.keyAttrId = keyAttrId;
     this.keyAttr   = keyAttr;
 }
예제 #6
0
 public AlgorithmIdentifier(
     DERObjectIdentifier objectId,
     ASN1Encodable parameters)
 {
     this.objectId   = objectId;
     this.parameters = parameters;
 }
예제 #7
0
        public AttributeCertificateInfo(
            ASN1Sequence seq)
        {
            this.version                = DERInteger.getInstance(seq.getObjectAt(0));
            this.holder                 = Holder.getInstance(seq.getObjectAt(1));
            this.issuer                 = AttCertIssuer.getInstance(seq.getObjectAt(2));
            this.signature              = AlgorithmIdentifier.getInstance(seq.getObjectAt(3));
            this.serialNumber           = DERInteger.getInstance(seq.getObjectAt(4));
            this.attrCertValidityPeriod = AttCertValidityPeriod.getInstance(seq.getObjectAt(5));
            this.attributes             = ASN1Sequence.getInstance(seq.getObjectAt(6));

            for (int i = 7; i < seq.size(); i++)
            {
                ASN1Encodable obj = (ASN1Encodable)seq.getObjectAt(i);

                if (obj is DERBitString)
                {
                    this.issuerUniqueID = DERBitString.getInstance(seq.getObjectAt(i));
                }
                else if (obj is ASN1Sequence || obj is X509Extensions)
                {
                    this.extensions = X509Extensions.getInstance(seq.getObjectAt(i));
                }
            }
        }
예제 #8
0
 public ContentInfo(
     DERObjectIdentifier contentType,
     ASN1Encodable content)
 {
     this.contentType = contentType;
     this.content     = content;
 }
예제 #9
0
 public CertStatus(
     int tagNo,
     ASN1Encodable value)
 {
     this.tagNo = tagNo;
     this.value = value;
 }
예제 #10
0
 public OtherRecipientInfo(
     DERObjectIdentifier oriType,
     ASN1Encodable oriValue)
 {
     this.oriType  = oriType;
     this.oriValue = oriValue;
 }
예제 #11
0
        public SMIMECapability(
            ASN1Sequence seq)
        {
            capabilityID = (DERObjectIdentifier)seq.getObjectAt(0);

            if (seq.size() > 1)
            {
                parameters = (ASN1Object)seq.getObjectAt(1);
            }
        }
예제 #12
0
        public void addCapability(
            DERObjectIdentifier capability,
            ASN1Encodable _params)
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(capability);
            v.add(_params);

            capabilities.add(new DERSequence(v));
        }
예제 #13
0
        public EncryptedData(
            DERObjectIdentifier contentType,
            AlgorithmIdentifier encryptionAlgorithm,
            ASN1Encodable content)
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(contentType);
            v.add(encryptionAlgorithm.toASN1Object());
            v.add(new BERTaggedObject(false, 0, content));

            data = new BERSequence(v);
        }
예제 #14
0
        public ContentInfo(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            e.MoveNext();
            contentType = (DERObjectIdentifier)e.Current;

            if (e.MoveNext())
            {
                content = ((DERTaggedObject)e.Current).getObject();
            }
        }
예제 #15
0
        public AlgorithmIdentifier(
            ASN1Sequence seq)
        {
            objectId = (DERObjectIdentifier)seq.getObjectAt(0);

            if (seq.size() == 2)
            {
                parameters = seq.getObjectAt(1);
            }
            else
            {
                parameters = null;
            }
        }
예제 #16
0
        public DistributionPointName(
            ASN1TaggedObject obj)
        {
            this.type = obj.getTagNo();

            if (type == FULL_NAME)
            {
                this.name = GeneralNames.getInstance(obj, false);
            }
            else
            {
                this.name = ASN1Set.getInstance(obj, false);
            }
        }
예제 #17
0
        public static EncryptedPrivateKeyInfo createEncryptedPrivateKeyInfo(
            String algorithm,
            char[] passPhrase,
            byte[] salt,
            int iterationCount,
            PrivateKeyInfo keyInfo)
        {
            if (!PBEUtil.isPBEAlgorithm(algorithm))
            {
                throw new Exception("attempt to use non-PBE algorithm with PBE EncryptedPrivateKeyInfo generation");
            }

            ASN1Encodable    parameters    = PBEUtil.generateAlgorithmParameters(algorithm, salt, iterationCount);
            CipherParameters keyParameters = PBEUtil.generateCipherParameters(algorithm, passPhrase, parameters);

            byte[] encoding = null;
            Object engine   = PBEUtil.createEngine(algorithm);

            if (engine is BufferedBlockCipher)
            {
                BufferedBlockCipher cipher = (BufferedBlockCipher)engine;

                cipher.init(true, keyParameters);

                byte[] keyBytes = keyInfo.getEncoded();

                int encLen = cipher.getOutputSize(keyBytes.Length);

                encoding = new byte[encLen];

                int off = cipher.processBytes(keyBytes, 0, keyBytes.Length, encoding, 0);

                cipher.doFinal(encoding, off);
            }
            else if (engine is StreamCipher)
            {
                StreamCipher cipher = (StreamCipher)engine;

                cipher.init(true, keyParameters);

                byte[] keyBytes = keyInfo.getEncoded();

                encoding = new byte[keyBytes.Length];

                cipher.processBytes(keyBytes, 0, keyBytes.Length, encoding, 0);
            }

            return(new EncryptedPrivateKeyInfo(new AlgorithmIdentifier(PBEUtil.getObjectIdentifier(algorithm), parameters), encoding));
        }
예제 #18
0
        /// <summary>
        /// Add an extension to this certificate.
        /// </summary>
        /// <param name="OID">Its Object identifier.</param>
        /// <param name="critical">Is it crtical.</param>
        /// <param name="value">The value.</param>
        public void addExtension(DERObjectIdentifier OID, bool critical, ASN1Encodable value)
        {
            MemoryStream    mStr = new MemoryStream();
            DEROutputStream dOut = new DEROutputStream(mStr);

            try
            {
                dOut.writeObject(value);
            }
            catch (IOException e)
            {
                throw new Exception("error encoding value: " + e);
            }

            this.addExtension(OID, critical, mStr.ToArray());
        }
예제 #19
0
        public CertStatus(
            ASN1TaggedObject choice)
        {
            this.tagNo = choice.getTagNo();

            switch ((int)choice.getTagNo())
            {
            case 0:
                value = new DERNull();
                break;

            case 1:
                value = RevokedInfo.getInstance(choice, false);
                break;

            case 2:
                value = new DERNull();
                break;
            }
        }
예제 #20
0
 /**
  * Creates a new <code>PolicyQualifierInfo</code> instance.
  *
  * @param as <code>PolicyQualifierInfo</code> X509 structure
  * encoded as an ASN1Sequence.
  */
 public PolicyQualifierInfo(ASN1Sequence aseq)
 {
     policyQualifierId = (DERObjectIdentifier)aseq.getObjectAt(0);
     qualifier         = aseq.getObjectAt(1);
 }
예제 #21
0
 public void addAttribute(string oid, ASN1Encodable value)
 {
     attributes.add(new Attribute(new DERObjectIdentifier(oid), new DERSet(value)));
 }
예제 #22
0
 /**
  * Creates a new <code>PolicyQualifierInfo</code> instance.
  *
  * @param policyQualifierId a <code>PolicyQualifierId</code> value
  * @param qualifier the qualifier, defined by the above field.
  */
 public PolicyQualifierInfo(DERObjectIdentifier policyQualifierId,
                            ASN1Encodable qualifier)
 {
     this.policyQualifierId = policyQualifierId;
     this.qualifier         = qualifier;
 }
예제 #23
0
 /**
  * Creates a new <code>PolicyQualifierInfo</code> containing a
  * cPSuri qualifier.
  *
  * @param cps the CPS (certification practice statement) uri as a
  * <code>String</code>.
  */
 public PolicyQualifierInfo(String cps)
 {
     policyQualifierId = PolicyQualifierId.id_qt_cps;
     qualifier         = new DERIA5String(cps);
 }
예제 #24
0
 public DEROctetString(ASN1Encodable obj) : base(obj)
 {
 }
예제 #25
0
 public SignerIdentifier(
     ASN1OctetString id)
 {
     this.id = new DERTaggedObject(false, 0, id);
 }
예제 #26
0
        public static CipherParameters generateCipherParameters(
            String algorithm,
            char[]          password,
            ASN1Encodable pbeParameters)
        {
            String mechanism = (string)algorithms[algorithm.ToUpper()];

            byte[]           key;
            CipherParameters parameters = null;
            String           type       = (String)algorithmType[mechanism];

            byte[] salt           = null;
            int    iterationCount = 0;

            if (isPKCS12(mechanism))
            {
                PKCS12PBEParams pbeParams = PKCS12PBEParams.getInstance(pbeParameters);

                salt           = pbeParams.getIV();
                iterationCount = pbeParams.getIterations().intValue();
                key            = PBEParametersGenerator.PKCS12PasswordToBytes(password);
            }
            else if (isPKCS5Scheme2(mechanism))
            {
                PBKDF2Params pbeParams = PBKDF2Params.getInstance(pbeParameters);

                salt           = pbeParams.getSalt();
                iterationCount = pbeParams.getIterationCount().intValue();
                key            = PBEParametersGenerator.PKCS5PasswordToBytes(password);
            }
            else
            {
                PBEParameter pbeParams = PBEParameter.getInstance(pbeParameters);

                salt           = pbeParams.getSalt();
                iterationCount = pbeParams.getIterationCount().intValue();
                key            = PBEParametersGenerator.PKCS5PasswordToBytes(password);
            }

            if (mechanism.StartsWith("PBEwithSHA-1"))
            {
                PBEParametersGenerator generator = makePBEGenerator((String)algorithmType[mechanism], new SHA1Digest(), key, salt, iterationCount);

                if (mechanism.Equals("PBEwithSHA-1and128bitRC4"))
                {
                    parameters = generator.generateDerivedParameters(128);
                }
                else if (mechanism.Equals("PBEwithSHA-1and40bitRC4"))
                {
                    parameters = generator.generateDerivedParameters(40);
                }
                else if (mechanism.Equals("PBEwithSHA-1and3-keyDESEDE-CBC"))
                {
                    parameters = generator.generateDerivedParameters(192, 64);
                }
                else if (mechanism.Equals("PBEwithSHA-1and2-keyDESEDE-CBC"))
                {
                    parameters = generator.generateDerivedParameters(128, 64);
                }
                else if (mechanism.Equals("PBEwithSHA-1and128bitRC2-CBC"))
                {
                    parameters = generator.generateDerivedParameters(128, 64);
                }
                else if (mechanism.Equals("PBEwithSHA-1and40bitRC2-CBC"))
                {
                    parameters = generator.generateDerivedParameters(40, 64);
                }
                else if (mechanism.Equals("PBEwithSHA1andDES-CBC"))
                {
                    parameters = generator.generateDerivedParameters(64, 64);
                }
                else if (mechanism.Equals("PBEwithSHA1andRC2-CBC"))
                {
                    parameters = generator.generateDerivedParameters(128, 64);
                }
            }
            else if (mechanism.StartsWith("PBEwithMD5"))
            {
                PBEParametersGenerator generator = makePBEGenerator((String)algorithmType[mechanism], new MD5Digest(), key, salt, iterationCount);

                if (mechanism.Equals("PBEwithMD5andDES-CBC"))
                {
                    parameters = generator.generateDerivedParameters(64, 64);
                }
                else if (mechanism.Equals("PBEwithMD5andRC2-CBC"))
                {
                    parameters = generator.generateDerivedParameters(64, 64);
                }
            }
            else if (mechanism.StartsWith("PBEwithMD2"))
            {
                PBEParametersGenerator generator = makePBEGenerator((String)algorithmType[mechanism], new MD2Digest(), key, salt, iterationCount);

                if (mechanism.Equals("PBEwithMD2andDES-CBC"))
                {
                    parameters = generator.generateDerivedParameters(64, 64);
                }
                else if (mechanism.Equals("PBEwithMD2andRC2-CBC"))
                {
                    parameters = generator.generateDerivedParameters(64, 64);
                }
            }
            else if (mechanism.StartsWith("PBEwithHmac"))
            {
                if (mechanism.Equals("PBEwithHmacSHA-1"))
                {
                    PBEParametersGenerator generator = makePBEGenerator((String)algorithmType[mechanism], new SHA1Digest(), key, salt, iterationCount);

                    parameters = generator.generateDerivedMacParameters(160);
                }
                else if (mechanism.Equals("PBEwithHmacSHA-224"))
                {
                    PBEParametersGenerator generator = makePBEGenerator((String)algorithmType[mechanism], new SHA224Digest(), key, salt, iterationCount);

                    parameters = generator.generateDerivedMacParameters(224);
                }
                else if (mechanism.Equals("PBEwithHmacSHA-256"))
                {
                    PBEParametersGenerator generator = makePBEGenerator((String)algorithmType[mechanism], new SHA256Digest(), key, salt, iterationCount);

                    parameters = generator.generateDerivedMacParameters(256);
                }
                else if (mechanism.Equals("PBEwithHmacRIPEMD128"))
                {
                    PBEParametersGenerator generator = makePBEGenerator((String)algorithmType[mechanism], new RIPEMD128Digest(), key, salt, iterationCount);

                    parameters = generator.generateDerivedMacParameters(128);
                }
                else if (mechanism.Equals("PBEwithHmacRIPEMD160"))
                {
                    PBEParametersGenerator generator = makePBEGenerator((String)algorithmType[mechanism], new RIPEMD160Digest(), key, salt, iterationCount);

                    parameters = generator.generateDerivedMacParameters(160);
                }
                else if (mechanism.Equals("PBEwithHmacRIPEMD256"))
                {
                    PBEParametersGenerator generator = makePBEGenerator((String)algorithmType[mechanism], new RIPEMD256Digest(), key, salt, iterationCount);

                    parameters = generator.generateDerivedMacParameters(256);
                }
            }

            for (int i = 0; i != key.Length; i++)
            {
                key[i] = 0;
            }

            return(parameters);
        }
예제 #27
0
 public SignerIdentifier(
     IssuerAndSerialNumber id)
 {
     this.id = id;
 }
예제 #28
0
 public ResponderID(
     ASN1OctetString value)
 {
     this.value = value;
 }
예제 #29
0
 public SignerIdentifier(
     ASN1Object id)
 {
     this.id = id;
 }
예제 #30
0
 public ResponderID(
     X509Name value)
 {
     this.value = value;
 }