001package top.cenze.utils.crypt.sm.sm2; 002 003 004import org.bouncycastle.crypto.generators.ECKeyPairGenerator; 005import org.bouncycastle.crypto.params.ECDomainParameters; 006import org.bouncycastle.crypto.params.ECKeyGenerationParameters; 007import org.bouncycastle.math.ec.ECCurve; 008import org.bouncycastle.math.ec.ECFieldElement; 009import org.bouncycastle.math.ec.ECFieldElement.Fp; 010import org.bouncycastle.math.ec.ECPoint; 011 012import java.math.BigInteger; 013import java.security.SecureRandom; 014 015public class SM2 { 016 017 //国密参数 018 public static String[] ecc_param = { 019 "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF", 020 "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC", 021 "28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93", 022 "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123", 023 "32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7", 024 "BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0" 025 }; 026 027 public static SM2 Instance() 028 { 029 return new SM2(); 030 } 031 032 public final BigInteger ecc_p; 033 public final BigInteger ecc_a; 034 public final BigInteger ecc_b; 035 public final BigInteger ecc_n; 036 public final BigInteger ecc_gx; 037 public final BigInteger ecc_gy; 038 public final ECCurve ecc_curve; 039 public final ECPoint ecc_point_g; 040 public final ECDomainParameters ecc_bc_spec; 041 public final ECKeyPairGenerator ecc_key_pair_generator; 042 public final ECFieldElement ecc_gx_fieldelement; 043 public final ECFieldElement ecc_gy_fieldelement; 044 045 public SM2() 046 { 047 this.ecc_p = new BigInteger(ecc_param[0], 16); 048 this.ecc_a = new BigInteger(ecc_param[1], 16); 049 this.ecc_b = new BigInteger(ecc_param[2], 16); 050 this.ecc_n = new BigInteger(ecc_param[3], 16); 051 this.ecc_gx = new BigInteger(ecc_param[4], 16); 052 this.ecc_gy = new BigInteger(ecc_param[5], 16); 053 054 this.ecc_gx_fieldelement = new Fp(this.ecc_p, this.ecc_gx); 055 this.ecc_gy_fieldelement = new Fp(this.ecc_p, this.ecc_gy); 056 057 this.ecc_curve = new ECCurve.Fp(this.ecc_p, this.ecc_a, this.ecc_b); 058 this.ecc_point_g = new ECPoint.Fp(this.ecc_curve, this.ecc_gx_fieldelement, this.ecc_gy_fieldelement); 059 060 this.ecc_bc_spec = new ECDomainParameters(this.ecc_curve, this.ecc_point_g, this.ecc_n); 061 062 ECKeyGenerationParameters ecc_ecgenparam; 063 ecc_ecgenparam = new ECKeyGenerationParameters(this.ecc_bc_spec, new SecureRandom()); 064 065 this.ecc_key_pair_generator = new ECKeyPairGenerator(); 066 this.ecc_key_pair_generator.init(ecc_ecgenparam); 067 } 068}