示例#1
0
        public static AddRequest Extract(ICollection <byte> buffer)
        {
            var addRequest = new AddRequest();

            addRequest.Entry      = DEROctetString.Extract(buffer);
            addRequest.Attributes = DERSequence <PartialAttribute> .Extract(buffer);

            return(addRequest);
        }
        public static SearchResultEntry Extract(ICollection <byte> payload)
        {
            var result = new SearchResultEntry();

            result.ObjectName        = DEROctetString.Extract(payload);
            result.PartialAttributes = DERSequence <PartialAttribute> .Extract(payload);

            return(result);
        }
示例#3
0
        public static ModifyRequest Extract(ICollection <byte> buffer)
        {
            var modifyRequest = new ModifyRequest();

            modifyRequest.Object  = DEROctetString.Extract(buffer);
            modifyRequest.Changes = DERSequence <ModifyRequestChange> .Extract(buffer);

            return(modifyRequest);
        }
 public SearchResultEntry()
 {
     PartialAttributes = new DERSequence <PartialAttribute>();
     Tag = new DERTag
     {
         LdapCommand = LdapCommands.SearchResultEntry,
         TagClass    = ClassTags.Application,
         TagNumber   = (int)LdapCommands.SearchResultEntry,
         PcType      = PcTypes.Constructed
     };
 }
示例#5
0
        public static LdapPacket Extract(ICollection <byte> buffer)
        {
            var ldapPacket = new LdapPacket();

            ldapPacket.ExtractTagAndLength(buffer);
            ldapPacket.MessageId         = DERInteger.Extract(buffer);
            ldapPacket.ProtocolOperation = DERProtocolOperation.Extract(buffer);
            if (buffer.Count > 0)
            {
                ldapPacket.Controls = DERSequence <DERControl> .Extract(buffer);
            }

            return(ldapPacket);
        }
示例#6
0
        public AuthorityInformationAccess(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            if (e.MoveNext())
            {
                DERSequence vec = (DERSequence)e.Current;
                if (vec.size() != 2)
                {
                    throw new ArgumentException("wrong number of elements in inner sequence");
                }
                accessMethod   = (DERObjectIdentifier)vec.getObjectAt(0);
                accessLocation = (GeneralName)vec.getObjectAt(1);
            }
        }
示例#7
0
        public static SearchRequest Extract(ICollection <byte> buffer)
        {
            var searchRequest = new SearchRequest();

            searchRequest.BaseObject = DEROctetString.Extract(buffer);
            searchRequest.Scope      = DEREnumerated <SearchRequestScopes> .Extract(buffer);

            searchRequest.DeferAlias = DEREnumerated <SearchRequestDeferAliases> .Extract(buffer);

            searchRequest.SizeLimit  = DERInteger.Extract(buffer);
            searchRequest.TimeLimit  = DERInteger.Extract(buffer);
            searchRequest.TypesOnly  = DERBoolean.Extract(buffer);
            searchRequest.Filter     = SearchRequestFilter.Extract(buffer);
            searchRequest.Attributes = DERSequence <DEROctetString> .Extract(buffer);

            return(searchRequest);
        }
示例#8
0
        /**
         * Gets the bytes for the PKCS7SignedData object. Optionally the authenticatedAttributes
         * in the signerInfo can also be set. If either of the parameters is <CODE>null</CODE>, none will be used.
         * @param secondDigest the digest in the authenticatedAttributes
         * @param signingTime the signing time in the authenticatedAttributes
         * @return the bytes for the PKCS7SignedData object
         */
        public byte[] GetEncodedPKCS7(byte[] secondDigest, DateTime signingTime)
        {
            if (externalDigest != null)
            {
                digest = externalDigest;
                if (RSAdata != null)
                {
                    RSAdata = externalRSAdata;
                }
            }
            else if (externalRSAdata != null && RSAdata != null)
            {
                RSAdata = externalRSAdata;
                sig.update(RSAdata, 0, RSAdata.Length);
                digest = sig.generateSignature();
            }
            else
            {
                if (RSAdata != null)
                {
                    RSAdata = new byte[messageDigest.getDigestSize()];
                    messageDigest.doFinal(RSAdata, 0);
                    sig.update(RSAdata, 0, RSAdata.Length);
                }
                digest = sig.generateSignature();
            }

            // Create the set of Hash algorithms
            ASN1EncodableVector digestAlgorithms = new ASN1EncodableVector();

            foreach (string dal in digestalgos.Keys)
            {
                ASN1EncodableVector algos = new ASN1EncodableVector();
                algos.add(new DERObjectIdentifier(dal));
                algos.add(new DERNull());
                digestAlgorithms.add(new DERSequence(algos));
            }

            // Create the contentInfo.
            ASN1EncodableVector v = new ASN1EncodableVector();

            v.add(new DERObjectIdentifier(ID_PKCS7_DATA));
            if (RSAdata != null)
            {
                v.add(new DERTaggedObject(0, new DEROctetString(RSAdata)));
            }
            DERSequence contentinfo = new DERSequence(v);

            // Get all the certificates
            //
            v = new ASN1EncodableVector();
            foreach (X509Certificate xcert in certs)
            {
                ASN1InputStream tempstream = new ASN1InputStream(new MemoryStream(xcert.getEncoded()));
                v.add(tempstream.readObject());
            }

            DERSet dercertificates = new DERSet(v);

            // Create signerinfo structure.
            //
            ASN1EncodableVector signerinfo = new ASN1EncodableVector();

            // Add the signerInfo version
            //
            signerinfo.add(new DERInteger(signerversion));

            v = new ASN1EncodableVector();
            v.add(GetIssuer(signCert.getTBSCertificate()));
            v.add(new DERInteger(signCert.getSerialNumber()));
            signerinfo.add(new DERSequence(v));

            // Add the digestAlgorithm
            v = new ASN1EncodableVector();
            v.add(new DERObjectIdentifier(digestAlgorithm));
            v.add(new DERNull());
            signerinfo.add(new DERSequence(v));

            // add the authenticated attribute if present
            if (secondDigest != null /*&& signingTime != null*/)
            {
                ASN1EncodableVector attribute = new 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));
                signerinfo.add(new DERTaggedObject(false, 0, new DERSet(attribute)));
            }
            // Add the digestEncryptionAlgorithm
            v = new ASN1EncodableVector();
            v.add(new DERObjectIdentifier(digestEncryptionAlgorithm));
            v.add(new DERNull());
            signerinfo.add(new DERSequence(v));

            // Add the digest
            signerinfo.add(new DEROctetString(digest));


            // Finally build the body out of all the components above
            ASN1EncodableVector body = new ASN1EncodableVector();

            body.add(new DERInteger(version));
            body.add(new DERSet(digestAlgorithms));
            body.add(contentinfo);
            body.add(new DERTaggedObject(false, 0, dercertificates));

//                if (crls.Count > 0) {
//                    v = new ASN1EncodableVector();
//                    for (Iterator i = crls.iterator();i.hasNext();) {
//                        ASN1InputStream t = new ASN1InputStream(new ByteArrayInputStream((((X509CRL)i.next()).getEncoded())));
//                        v.add(t.readObject());
//                    }
//                    DERSet dercrls = new DERSet(v);
//                    body.add(new DERTaggedObject(false, 1, dercrls));
//                }

            // Only allow one signerInfo
            body.add(new DERSet(new DERSequence(signerinfo)));

            // Now we have the body, wrap it in it's PKCS7Signed shell
            // and return it
            //
            ASN1EncodableVector whole = new ASN1EncodableVector();

            whole.add(new DERObjectIdentifier(ID_PKCS7_SIGNED_DATA));
            whole.add(new DERTaggedObject(0, new DERSequence(body)));

            MemoryStream bOut = new MemoryStream();

            ASN1OutputStream dout = new ASN1OutputStream(bOut);

            dout.writeObject(new DERSequence(whole));
            dout.Close();

            return(bOut.ToArray());
        }
示例#9
0
 internal AddRequestBuilder(string distinguishedName)
 {
     _distinguishedName = distinguishedName;
     _attributes        = new DERSequence <PartialAttribute>();
 }