Exemplo n.º 1
0
        /**
         * Produce an object suitable for an ASN1OutputStream.
         * <pre>
         * TBSRequest      ::=     SEQUENCE {
         *     version             [0]     EXPLICIT Version DEFAULT v1,
         *     requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
         *     requestList                 SEQUENCE OF Request,
         *     requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
         * </pre>
         */
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            //
            // if default don't include.
            //
            if (version.getValue().intValue() != 0)
            {
                v.add(new DERTaggedObject(true, 0, version));
            }

            if (requestorName != null)
            {
                v.add(new DERTaggedObject(true, 1, requestorName));
            }

            v.add(requestList);

            if (requestExtensions != null)
            {
                v.add(new DERTaggedObject(true, 2, requestExtensions));
            }

            return(new DERSequence(v));
        }
Exemplo n.º 2
0
        /**
         * When using authenticatedAttributes the authentication process is different.
         * The document digest is generated and put inside the attribute. The signing is done over the DER encoded
         * authenticatedAttributes. This method provides that encoding and the parameters must be
         * exactly the same as in {@link #getEncodedPKCS7(byte[],Calendar)}.
         * <p>
         * A simple example:
         * <p>
         * <pre>
         * Calendar cal = Calendar.getInstance();
         * PdfPKCS7 pk7 = new PdfPKCS7(key, chain, null, "SHA1", null, false);
         * MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
         * byte buf[] = new byte[8192];
         * int n;
         * Stream inp = sap.getRangeStream();
         * while ((n = inp.read(buf)) &gt; 0) {
         *    messageDigest.update(buf, 0, n);
         * }
         * byte hash[] = messageDigest.digest();
         * byte sh[] = pk7.getAuthenticatedAttributeBytes(hash, cal);
         * pk7.update(sh, 0, sh.length);
         * byte sg[] = pk7.getEncodedPKCS7(hash, cal);
         * </pre>
         * @param secondDigest the content digest
         * @param signingTime the signing time
         * @return the byte array representation of the authenticatedAttributes ready to be signed
         */
        public byte[] GetAuthenticatedAttributeBytes(byte[] secondDigest, DateTime signingTime)
        {
            ASN1EncodableVector attribute = new ASN1EncodableVector();
            ASN1EncodableVector v         = new ASN1EncodableVector();

            v.add(new DERObjectIdentifier(ID_CONTENT_TYPE));
            v.add(new DERSet(new DERObjectIdentifier(ID_PKCS7_DATA)));
            attribute.add(new DERSequence(v));
            v = new ASN1EncodableVector();
            v.add(new DERObjectIdentifier(ID_SIGNING_TIME));
            v.add(new DERSet(new DERUTCTime(signingTime)));
            attribute.add(new DERSequence(v));
            v = new ASN1EncodableVector();
            v.add(new DERObjectIdentifier(ID_MESSAGE_DIGEST));
            v.add(new DERSet(new DEROctetString(secondDigest)));
            attribute.add(new DERSequence(v));
            MemoryStream bOut = new MemoryStream();

            ASN1OutputStream dout = new ASN1OutputStream(bOut);

            dout.writeObject(new DERSet(attribute));
            dout.Close();

            return(bOut.ToArray());
        }
Exemplo n.º 3
0
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector vec = new ASN1EncodableVector();
            IEnumerator         e   = ordering.GetEnumerator();

            while (e.MoveNext())
            {
                DERObjectIdentifier oid = (DERObjectIdentifier)e.Current;
                X509Extension       ext = (X509Extension)extensions[oid];
                ASN1EncodableVector v   = new ASN1EncodableVector();

                v.add(oid);

                if (ext.isCritical())
                {
                    v.add(new DERBoolean(true));
                }

                v.add(ext.getValue());

                vec.add(new DERSequence(v));
            }

            return(new DERSequence(vec));
        }
Exemplo n.º 4
0
        public TBSCertificateStructure generateTBSCertificate()
        {
            if ((serialNumber == null) || (signature == null) ||
                (issuer == null) || (startDate == null) || (endDate == null) ||
                (subject == null) || (subjectPublicKeyInfo == null))
            {
                throw new InvalidOperationException("not all mandatory fields set in V1 TBScertificate generator");
            }

            ASN1EncodableVector seq = new ASN1EncodableVector();

            // seq.add(version); - not required as default value
            seq.add(serialNumber);
            seq.add(signature);
            seq.add(issuer);

            //
            // before and after dates
            //
            ASN1EncodableVector validity = new ASN1EncodableVector();

            validity.add(startDate);
            validity.add(endDate);

            seq.add(new DERSequence(validity));

            seq.add(subject);

            seq.add(subjectPublicKeyInfo);

            return(new TBSCertificateStructure(new DERSequence(seq)));
        }
Exemplo n.º 5
0
        /**
         * generate a signature for the message we've been loaded with using
         * the key we were initialised with.
         */
        public byte[] generateSignature()
        {
            if (forSigning)
            {
                MemoryStream        bOut = new MemoryStream();
                DEROutputStream     dOut = new DEROutputStream(bOut);
                ASN1EncodableVector v    = new ASN1EncodableVector();

                byte[] dig = new byte[digest.getDigestSize()];
                digest.doFinal(dig, 0);

                BigInteger[] sig = dsaSigner.generateSignature(dig);

                v.add(new DERInteger(sig[0]));
                v.add(new DERInteger(sig[1]));

                dOut.writeObject(new DERSequence(v));
                dOut.Flush();

                byte[] output = bOut.ToArray();
                dOut.Close();
                return(output);
            }
            throw new Exception("DSADigestSigner initialised for verification..");
        }
Exemplo n.º 6
0
        /**
         * Describe <code>toASN1Object</code> method here.
         *
         * @return a <code>ASN1Object</code> value
         */
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector av = new ASN1EncodableVector();

            av.add(organization);
            av.add(noticeNumbers);
            return(new DERSequence(av));
        }
Exemplo n.º 7
0
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(algId);
            v.add(new DEROctetString(digest));

            return(new DERSequence(v));
        }
Exemplo n.º 8
0
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(func);
            v.add(scheme);

            return(new DERSequence(v));
        }
Exemplo n.º 9
0
        /**
         * Produce an object suitable for an ASN1OutputStream.
         * <pre>
         * Attribute ::= SEQUENCE {
         *     attrType OBJECT IDENTIFIER,
         *     attrValues SET OF AttributeValue
         * }
         * </pre>
         */
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(attrType);
            v.add(attrValues);

            return(new DERSequence(v));
        }
Exemplo n.º 10
0
        /**
         * This outputs the key in PKCS1v2 format.
         * <pre>
         *      RSAPublicKey ::= SEQUENCE {
         *                          modulus INTEGER, -- n
         *                          publicExponent INTEGER, -- e
         *                      }
         * </pre>
         * <p>
         */
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(new DERInteger(getModulus()));
            v.add(new DERInteger(getPublicExponent()));

            return(new DERSequence(v));
        }
Exemplo n.º 11
0
        /**
         * Returns a DER-encodable representation of this instance.
         *
         * @return a <code>ASN1Object</code> value
         */
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector dev = new ASN1EncodableVector();

            dev.add(policyQualifierId);
            dev.add(qualifier);

            return(new DERSequence(dev));
        }
Exemplo n.º 12
0
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(objectId);
            v.add(obj);

            return(new DERSequence(v));
        }
Exemplo n.º 13
0
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(certId);
            v.add(new DERTaggedObject(0, certValue));

            return(new DERSequence(v));
        }
Exemplo n.º 14
0
        /**
         * Produce an object suitable for an ASN1OutputStream.
         * <pre>
         * OriginatorPublicKey ::= SEQUENCE {
         *     algorithm AlgorithmIdentifier,
         *     publicKey BIT STRING
         * }
         * </pre>
         */
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(algorithm);
            v.add(publicKey);

            return(new DERSequence(v));
        }
Exemplo n.º 15
0
        /**
         * Produce an object suitable for an ASN1OutputStream.
         * <pre>
         *  AttCertValidityPeriod  ::= SEQUENCE {
         *       notBeforeTime  GeneralizedTime,
         *       notAfterTime   GeneralizedTime
         *  }
         * </pre>
         */
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(notBeforeTime);
            v.add(notAfterTime);

            return(new DERSequence(v));
        }
Exemplo n.º 16
0
        /**
         * Produce a DER encoding of the following structure.
         * <pre>
         *  FieldID ::= SEQUENCE {
         *      fieldType       FIELD-ID.&amp;id({IOSet}),
         *      parameters      FIELD-ID.&amp;Type({IOSet}{&#64;fieldType})
         *  }
         * </pre>
         */
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(this.id);
            v.add(this.parameters);

            return(new DERSequence(v));
        }
Exemplo n.º 17
0
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(name);
            v.add(certSerialNumber);

            return(new DERSequence(v));
        }
Exemplo n.º 18
0
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(new DERInteger(0));
            v.add(data);

            return(new BERSequence(v));
        }
Exemplo n.º 19
0
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(iv);
            v.add(iterations);

            return(new DERSequence(v));
        }
Exemplo n.º 20
0
        /**
         * Produce an object suitable for an ASN1OutputStream.
         * <pre>
         * ResponseBytes ::=       SEQUENCE {
         *     responseType   OBJECT IDENTIFIER,
         *     response       OCTET STRING }
         * </pre>
         */
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(responseType);
            v.add(response);

            return(new DERSequence(v));
        }
Exemplo n.º 21
0
        /**
         * Produce an object suitable for an ASN1OutputStream.
         * <pre>
         *  AttributeCertificate ::= SEQUENCE {
         *       acinfo               AttributeCertificateInfo,
         *       signatureAlgorithm   AlgorithmIdentifier,
         *       signatureValue       BIT STRING
         *  }
         * </pre>
         */
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(acinfo);
            v.add(signatureAlgorithm);
            v.add(signatureValue);

            return(new DERSequence(v));
        }
Exemplo n.º 22
0
        public AttributeTable(
            ASN1EncodableVector v)
        {
            for (int i = 0; i != v.size(); i++)
            {
                Attribute a = Attribute.getInstance(v.get(i));

                attributes.Add(a.getAttrType(), a);
            }
        }
Exemplo n.º 23
0
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(digInfo);
            v.add(new DEROctetString(salt));
            v.add(new DERInteger(iterationCount));

            return(new DERSequence(v));
        }
Exemplo n.º 24
0
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(version);
            v.add(compressionAlgorithm);
            v.add(encapContentInfo);

            return(new BERSequence(v));
        }
Exemplo n.º 25
0
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(tbsCertList);
            v.add(sigAlgId);
            v.add(sig);

            return(new DERSequence(v));
        }
Exemplo n.º 26
0
        /**
         * write out an RSA private key with it's asscociated information
         * as described in PKCS8.
         * <pre>
         *      PrivateKeyInfo ::= SEQUENCE {
         *                              version Version,
         *                              privateKeyAlgorithm AlgorithmIdentifier {{PrivateKeyAlgorithms}},
         *                              privateKey PrivateKey,
         *                              attributes [0] IMPLICIT Attributes OPTIONAL
         *                          }
         *      Version ::= INTEGER {v1(0)} (v1,...)
         *
         *      PrivateKey ::= OCTET STRING
         *
         *      Attributes ::= SET OF Attribute
         * </pre>
         */
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(new DERInteger(0));
            v.add(algId);
            v.add(new DEROctetString(privKey));

            return(new DERSequence(v));
        }
Exemplo n.º 27
0
        public void addCapability(
            DERObjectIdentifier capability,
            ASN1Encodable _params)
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

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

            capabilities.add(new DERSequence(v));
        }
Exemplo n.º 28
0
        public void addCapability(
            DERObjectIdentifier capability,
            int value)
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(capability);
            v.add(new DERInteger(value));

            capabilities.add(new DERSequence(v));
        }
Exemplo n.º 29
0
        /**
         * Produce an object suitable for an ASN1OutputStream.
         * <pre>
         * KEKRecipientInfo ::= SEQUENCE {
         *     version CMSVersion,  -- always set to 4
         *     kekid KEKIdentifier,
         *     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
         *     encryptedKey EncryptedKey
         * }
         * </pre>
         */
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(version);
            v.add(kekid);
            v.add(keyEncryptionAlgorithm);
            v.add(encryptedKey);

            return(new DERSequence(v));
        }
Exemplo n.º 30
0
        public override ASN1Object toASN1Object()
        {
            ASN1EncodableVector v = new ASN1EncodableVector();

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

            return(new BERSequence(v));
        }