18212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrompackage org.bouncycastle.asn1.x9;
28212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
34c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.math.BigInteger;
44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
58212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.math.ec.ECCurve;
68212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.math.ec.ECFieldElement;
78212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
88212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrompublic class X9IntegerConverter
98212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom{
108212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public int getByteLength(
118212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        ECCurve c)
128212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
138212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return (c.getFieldSize() + 7) / 8;
148212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
158212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
168212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public int getByteLength(
178212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        ECFieldElement fe)
188212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
198212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return (fe.getFieldSize() + 7) / 8;
208212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
218212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
228212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public byte[] integerToBytes(
238212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        BigInteger s,
248212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        int        qLength)
258212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
268212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        byte[] bytes = s.toByteArray();
278212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
288212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        if (qLength < bytes.length)
298212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        {
308212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            byte[] tmp = new byte[qLength];
318212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
328212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            System.arraycopy(bytes, bytes.length - tmp.length, tmp, 0, tmp.length);
338212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
348212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            return tmp;
358212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        }
368212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        else if (qLength > bytes.length)
378212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        {
388212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            byte[] tmp = new byte[qLength];
398212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
408212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            System.arraycopy(bytes, 0, tmp, tmp.length - bytes.length, bytes.length);
418212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
428212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            return tmp;
438212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        }
448212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
458212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return bytes;
468212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
478212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom}
48