Advertisement
Guest User

Untitled

a guest
Apr 9th, 2020
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 2.52 KB | None | 0 0
  1.  
  2. import 'dart:async';
  3. import 'dart:convert';
  4. import 'package:crypto/crypto.dart';
  5. var pcurve = BigInt.parse('115792089237316195423570985008687907853269984665640564039457584007908834671663',radix:10); // The proven prime
  6. var chiavePrivataBinString;
  7. Future<void> main() async {
  8. var gx = BigInt.parse('55066263022277343669578718895168534326250603453777594175500187360389116729240',radix:10);
  9. var gy = BigInt.parse('32670510020758816978083085130507043184471273380659243275938904335757337482424',radix:10);
  10. List<BigInt> gpoint = [gx, gy];
  11. var chiaveutf = utf8.encode("p@ssw0rd");
  12. var chiavesha = sha256.convert(chiaveutf);
  13. var chiavePrivataBigInt = BigInt.parse(chiavesha.toString(),radix:16);
  14. chiavePrivataBinString = chiavePrivataBigInt.toRadixString(2);
  15.  
  16. var chiavePrivataBinBigint = BigInt.parse(chiavePrivataBinString);
  17.  
  18. print("******* Public Key Generation *********");
  19.  
  20. var publicKey = await eccMultiply(gpoint,chiavePrivataBigInt);
  21. print('publicKey:${publicKey}');
  22.  
  23. }
  24.    
  25.    
  26.    
  27.  
  28. BigInt modinv(BigInt a,BigInt n){
  29.     var lm=BigInt.one;
  30.     var hm=BigInt.zero;
  31.     BigInt low = a%(n);
  32.     BigInt high = n;
  33.  
  34.     while (low > BigInt.one){
  35.         var ratio = high~/low;
  36.         var nm = hm-lm*ratio;
  37.         var new1 = high-low*ratio;
  38.         hm =lm;
  39.         lm = nm;
  40.         high = low;
  41.         low = new1;
  42.     }
  43.  
  44. return lm%(n);
  45. }
  46.  
  47.  
  48.  
  49. ecadd(List a,List b){
  50.     BigInt lamAdd = ((b[1]-a[1])* modinv(b[0]-a[0],pcurve))%(pcurve);
  51.     BigInt x = (lamAdd*lamAdd-a[0]-b[0])%(pcurve);
  52.     BigInt y;
  53.     y = (lamAdd*(a[0]-x)-a[1])%(pcurve);
  54.     List<BigInt> ecaddList = [x, y];
  55.     return ecaddList;
  56.    
  57. }
  58.  
  59. ecdouble(List a){
  60.     BigInt a0=BigInt.parse(a[0].toString());
  61.     BigInt a1=BigInt.parse(a[1].toString());
  62.     BigInt lam = ((BigInt.from(3)*a0*a0)* (modinv((BigInt.from(2)*a1),pcurve)) )%(pcurve);
  63.     BigInt x = (lam*lam-BigInt.two*a0)%(pcurve);
  64.     BigInt y = (lam*(a0-x)-a1)%(pcurve);
  65.     List<BigInt> ecdoubleList = [x, y];
  66.     return ecdoubleList;
  67. }
  68.  
  69. List StringToList(scalarBin){
  70.  
  71.   var string = '${scalarBin}';
  72.   string.split('');
  73.   return (string.codeUnits.map((unit) {
  74.   return new String.fromCharCode(unit);}).toList());
  75. }
  76.  
  77. eccMultiply(genPoint,scalarHex){
  78.     var q = new List<BigInt>();
  79.     var scalarBin = chiavePrivataBinString;
  80.     q=genPoint;
  81.     List listString=StringToList(chiavePrivataBinString);
  82.    
  83.  
  84.   listString.sublist(1).forEach((element)  async {
  85.    
  86.     q= ecdouble(q);
  87.   if(element=='1'){
  88.     q= ecadd(q,genPoint);
  89.   }
  90.   });
  91.     return(q);
  92.  
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement