001    /**
002     *  Licensed to the Apache Software Foundation (ASF) under one or more
003     *  contributor license agreements.  See the NOTICE file distributed with
004     *  this work for additional information regarding copyright ownership.
005     *  The ASF licenses this file to You under the Apache License, Version 2.0
006     *  (the "License"); you may not use this file except in compliance with
007     *  the License.  You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     *  Unless required by applicable law or agreed to in writing, software
012     *  distributed under the License is distributed on an "AS IS" BASIS,
013     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     *  See the License for the specific language governing permissions and
015     *  limitations under the License.
016     */
017    
018    package org.apache.geronimo.util.asn1.sec;
019    
020    import java.math.BigInteger;
021    import org.apache.geronimo.util.asn1.*;
022    
023    /**
024     * the elliptic curve private key object from SEC 1
025     */
026    public class ECPrivateKeyStructure
027        extends ASN1Encodable
028    {
029        private ASN1Sequence  seq;
030    
031        public ECPrivateKeyStructure(
032            ASN1Sequence  seq)
033        {
034            this.seq = seq;
035        }
036    
037        public ECPrivateKeyStructure(
038            BigInteger  key)
039        {
040            byte[]  bytes = key.toByteArray();
041    
042            if (bytes[0] == 0)
043            {
044                byte[]  tmp = new byte[bytes.length - 1];
045    
046                System.arraycopy(bytes, 1, tmp, 0, tmp.length);
047                bytes = tmp;
048            }
049    
050            ASN1EncodableVector v = new ASN1EncodableVector();
051    
052            v.add(new DERInteger(1));
053            v.add(new DEROctetString(bytes));
054    
055            seq = new DERSequence(v);
056        }
057    
058        public BigInteger getKey()
059        {
060            ASN1OctetString  octs = (ASN1OctetString)seq.getObjectAt(1);
061    
062            BigInteger  k = new BigInteger(1, octs.getOctets());
063    
064            return k;
065        }
066    
067        public DERObject toASN1Object()
068        {
069            return seq;
070        }
071    }