001package org.apache.commons.ssl.org.bouncycastle.asn1.cryptopro; 002 003import java.math.BigInteger; 004import java.util.Enumeration; 005import java.util.Hashtable; 006 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier; 008import org.bouncycastle.crypto.params.ECDomainParameters; 009import org.bouncycastle.math.ec.ECConstants; 010import org.bouncycastle.math.ec.ECCurve; 011 012/** 013 * table of the available named parameters for GOST 3410-2001. 014 */ 015public class ECGOST3410NamedCurves 016{ 017 static final Hashtable objIds = new Hashtable(); 018 static final Hashtable params = new Hashtable(); 019 static final Hashtable names = new Hashtable(); 020 021 static 022 { 023 BigInteger mod_p = new BigInteger("115792089237316195423570985008687907853269984665640564039457584007913129639319"); 024 BigInteger mod_q = new BigInteger("115792089237316195423570985008687907853073762908499243225378155805079068850323"); 025 026 ECCurve.Fp curve = new ECCurve.Fp( 027 mod_p, // p 028 new BigInteger("115792089237316195423570985008687907853269984665640564039457584007913129639316"), // a 029 new BigInteger("166"), // b 030 mod_q, 031 ECConstants.ONE); 032 033 ECDomainParameters ecParams = new ECDomainParameters( 034 curve, 035 curve.createPoint( 036 new BigInteger("1"), // x 037 new BigInteger("64033881142927202683649881450433473985931760268884941288852745803908878638612")), // y 038 mod_q); 039 040 params.put(CryptoProObjectIdentifiers.gostR3410_2001_CryptoPro_A, ecParams); 041 042 mod_p = new BigInteger("115792089237316195423570985008687907853269984665640564039457584007913129639319"); 043 mod_q = new BigInteger("115792089237316195423570985008687907853073762908499243225378155805079068850323"); 044 045 curve = new ECCurve.Fp( 046 mod_p, // p 047 new BigInteger("115792089237316195423570985008687907853269984665640564039457584007913129639316"), 048 new BigInteger("166"), 049 mod_q, 050 ECConstants.ONE); 051 052 ecParams = new ECDomainParameters( 053 curve, 054 curve.createPoint( 055 new BigInteger("1"), // x 056 new BigInteger("64033881142927202683649881450433473985931760268884941288852745803908878638612")), // y 057 mod_q); 058 059 params.put(CryptoProObjectIdentifiers.gostR3410_2001_CryptoPro_XchA, ecParams); 060 061 mod_p = new BigInteger("57896044618658097711785492504343953926634992332820282019728792003956564823193"); //p 062 mod_q = new BigInteger("57896044618658097711785492504343953927102133160255826820068844496087732066703"); //q 063 064 curve = new ECCurve.Fp( 065 mod_p, // p 066 new BigInteger("57896044618658097711785492504343953926634992332820282019728792003956564823190"), // a 067 new BigInteger("28091019353058090096996979000309560759124368558014865957655842872397301267595"), // b 068 mod_q, 069 ECConstants.ONE); 070 071 ecParams = new ECDomainParameters( 072 curve, 073 curve.createPoint( 074 new BigInteger("1"), // x 075 new BigInteger("28792665814854611296992347458380284135028636778229113005756334730996303888124")), // y 076 mod_q); // q 077 078 params.put(CryptoProObjectIdentifiers.gostR3410_2001_CryptoPro_B, ecParams); 079 080 mod_p = new BigInteger("70390085352083305199547718019018437841079516630045180471284346843705633502619"); 081 mod_q = new BigInteger("70390085352083305199547718019018437840920882647164081035322601458352298396601"); 082 083 curve = new ECCurve.Fp( 084 mod_p, // p 085 new BigInteger("70390085352083305199547718019018437841079516630045180471284346843705633502616"), 086 new BigInteger("32858"), 087 mod_q, 088 ECConstants.ONE); 089 090 ecParams = new ECDomainParameters( 091 curve, 092 curve.createPoint( 093 new BigInteger("0"), 094 new BigInteger("29818893917731240733471273240314769927240550812383695689146495261604565990247")), 095 mod_q); 096 097 params.put(CryptoProObjectIdentifiers.gostR3410_2001_CryptoPro_XchB, ecParams); 098 099 mod_p = new BigInteger("70390085352083305199547718019018437841079516630045180471284346843705633502619"); //p 100 mod_q = new BigInteger("70390085352083305199547718019018437840920882647164081035322601458352298396601"); //q 101 curve = new ECCurve.Fp( 102 mod_p, // p 103 new BigInteger("70390085352083305199547718019018437841079516630045180471284346843705633502616"), // a 104 new BigInteger("32858"), // b 105 mod_q, 106 ECConstants.ONE); 107 108 ecParams = new ECDomainParameters( 109 curve, 110 curve.createPoint( 111 new BigInteger("0"), // x 112 new BigInteger("29818893917731240733471273240314769927240550812383695689146495261604565990247")), // y 113 mod_q); // q 114 115 params.put(CryptoProObjectIdentifiers.gostR3410_2001_CryptoPro_C, ecParams); 116 117 objIds.put("GostR3410-2001-CryptoPro-A", CryptoProObjectIdentifiers.gostR3410_2001_CryptoPro_A); 118 objIds.put("GostR3410-2001-CryptoPro-B", CryptoProObjectIdentifiers.gostR3410_2001_CryptoPro_B); 119 objIds.put("GostR3410-2001-CryptoPro-C", CryptoProObjectIdentifiers.gostR3410_2001_CryptoPro_C); 120 objIds.put("GostR3410-2001-CryptoPro-XchA", CryptoProObjectIdentifiers.gostR3410_2001_CryptoPro_XchA); 121 objIds.put("GostR3410-2001-CryptoPro-XchB", CryptoProObjectIdentifiers.gostR3410_2001_CryptoPro_XchB); 122 123 names.put(CryptoProObjectIdentifiers.gostR3410_2001_CryptoPro_A, "GostR3410-2001-CryptoPro-A"); 124 names.put(CryptoProObjectIdentifiers.gostR3410_2001_CryptoPro_B, "GostR3410-2001-CryptoPro-B"); 125 names.put(CryptoProObjectIdentifiers.gostR3410_2001_CryptoPro_C, "GostR3410-2001-CryptoPro-C"); 126 names.put(CryptoProObjectIdentifiers.gostR3410_2001_CryptoPro_XchA, "GostR3410-2001-CryptoPro-XchA"); 127 names.put(CryptoProObjectIdentifiers.gostR3410_2001_CryptoPro_XchB, "GostR3410-2001-CryptoPro-XchB"); 128 } 129 130 /** 131 * return the ECDomainParameters object for the given OID, null if it 132 * isn't present. 133 * 134 * @param oid an object identifier representing a named parameters, if present. 135 */ 136 public static ECDomainParameters getByOID( 137 ASN1ObjectIdentifier oid) 138 { 139 return (ECDomainParameters)params.get(oid); 140 } 141 142 /** 143 * returns an enumeration containing the name strings for parameters 144 * contained in this structure. 145 */ 146 public static Enumeration getNames() 147 { 148 return objIds.keys(); 149 } 150 151 public static ECDomainParameters getByName( 152 String name) 153 { 154 ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)objIds.get(name); 155 156 if (oid != null) 157 { 158 return (ECDomainParameters)params.get(oid); 159 } 160 161 return null; 162 } 163 164 /** 165 * return the named curve name represented by the given object identifier. 166 */ 167 public static String getName( 168 ASN1ObjectIdentifier oid) 169 { 170 return (String)names.get(oid); 171 } 172 173 public static ASN1ObjectIdentifier getOID(String name) 174 { 175 return (ASN1ObjectIdentifier)objIds.get(name); 176 } 177}