| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| |
| package org.apache.harmony.security.pkcs10; |
| |
| import org.apache.harmony.security.asn1.ASN1BitString; |
| import org.apache.harmony.security.asn1.ASN1Sequence; |
| import org.apache.harmony.security.asn1.ASN1Type; |
| import org.apache.harmony.security.asn1.BerInputStream; |
| import org.apache.harmony.security.asn1.BitString; |
| import org.apache.harmony.security.x509.AlgorithmIdentifier; |
| |
| /** |
| * The class implements the ASN.1 DER encoding and decoding of the PKCS#10 |
| * Certificate Signing Request (CSR). Its ASN notation is as follows: |
| * |
| * CertificationRequest ::= SEQUENCE { |
| * certificationRequestInfo CertificationRequestInfo, |
| * signatureAlgorithm SignatureAlgorithmIdentifier, |
| * signature Signature |
| * } |
| * |
| * SignatureAlgorithmIdentifier ::= AlgorithmIdentifier |
| * |
| * Signature ::= BIT STRING |
| */ |
| public final class CertificationRequest { |
| |
| /** the value of certificationRequestInfo field of the structure */ |
| private CertificationRequestInfo info; |
| |
| /** the value of signatureAlgorithm field of the structure */ |
| private AlgorithmIdentifier algId; |
| |
| /** the value of signature field of the structure */ |
| private byte[] signature; |
| |
| /** the ASN.1 encoded form of CertificationRequest */ |
| private byte[] encoding; |
| |
| public CertificationRequest(CertificationRequestInfo info, |
| AlgorithmIdentifier algId, byte[] signature) { |
| this.info = info; |
| this.algId = algId; |
| this.signature = signature.clone(); |
| } |
| |
| private CertificationRequest(CertificationRequestInfo info, |
| AlgorithmIdentifier algId, byte[] signature, byte[] encoding) { |
| this(info, algId, signature); |
| this.encoding = encoding; |
| } |
| |
| public CertificationRequestInfo getInfo() { |
| return info; |
| } |
| |
| public byte[] getSignature() { |
| byte[] result = new byte[signature.length]; |
| System.arraycopy(signature, 0, result, 0, signature.length); |
| return result; |
| } |
| |
| /** |
| * Returns ASN.1 encoded form of this CertificationRequest value. |
| * @return a byte array containing ASN.1 encode form. |
| */ |
| public byte[] getEncoded() { |
| if (encoding == null) { |
| encoding = CertificationRequest.ASN1.encode(this); |
| } |
| return encoding; |
| } |
| |
| public static final ASN1Sequence ASN1 = new ASN1Sequence(new ASN1Type[] { |
| CertificationRequestInfo.ASN1, // info |
| AlgorithmIdentifier.ASN1, // signatureAlgorithm |
| ASN1BitString.getInstance() }) // signature |
| { |
| |
| public Object getDecodedObject(BerInputStream in) { |
| Object[] values = (Object[]) in.content; |
| return new CertificationRequest( |
| (CertificationRequestInfo) values[0], |
| (AlgorithmIdentifier) values[1], |
| ((BitString) values[2]).bytes, |
| in.getEncoded()); |
| } |
| |
| protected void getValues(Object object, Object[] values) { |
| CertificationRequest certReq = (CertificationRequest) object; |
| values[0] = certReq.info; |
| values[1] = certReq.algId; |
| values[2] = new BitString(certReq.signature, 0); |
| } |
| }; |
| } |
| |