[개발] 스팀(js) vs 이오스(dart) sign 함수 비교 by wonsama

View this thread on steempeak.com
· @wonsama ·
$64.33
[개발] 스팀(js) vs 이오스(dart) sign 함수 비교
![](https://cdn.steemitimages.com/DQmWeeaqVfuPnwXNtdTLC7Bu4WPZdf3Fbev54rNe3sAowgM/image.png)

뭔가 비슷하면서도 다름...

초록색으로 표시된 부분을 보면 알겠지만 동일하다 ! 역시 이오스는 스팀을 가지고 큰 틀은 바꾸지 않음.

하지만 사인 하는 부분이 좀 달라서 ... ( 개인키 사용 등 ) 해당 부분은 테스트 해가면서 좀 많이 바꿔가면서 확인을 해야 될 것 같다. ㅜㅜ

그래서 빠른 결과물을 보기는 힘들 것 같고 누군가 개발에 능숙한 분이 사실 만들어 줬음 하는 바램도 있긴 하다 ;;

사인 하는 함수만 잘 이해하여 구현만 하면 뭐 다른 코인 개발할 때에도 큰 도움은 될 것 같다. 사실 ecc 타원곡선암호화를 어느정도 이해할  수 있기 때문이지 아니할까 생각도 해봄

여튼 쉽지만 않은 작업이 될거 같음. 그래도 잼나게 해볼 수 있을 것 같다 ㅎㅎ

# 관련 소스 발췌

>  key.dart 

```
/// Sign the SHA256 hashed data using the private key
  EOSSignature signHash(Uint8List sha256Data) {
    int nonce = 0;
    BigInt n = EOSKey.secp256k1.n;
    BigInt e = decodeBigInt(sha256Data);

    while (true) {
      _deterministicGenerateK(sha256Data, this.d, e, nonce++);
      var N_OVER_TWO = n >> 1;
      if (_s.compareTo(N_OVER_TWO) > 0) {
        _s = n - _s;
      }
      ECSignature sig = ECSignature(_r, _s);

      Uint8List der = EOSSignature.ecSigToDER(sig);

      int lenR = der.elementAt(3);
      int lenS = der.elementAt(5 + lenR);
      if (lenR == 32 && lenS == 32) {
        int i = EOSSignature.calcPubKeyRecoveryParam(
            decodeBigInt(sha256Data), sig, this.toEOSPublicKey());
        i += 4; // compressed
        i += 27; // compact  //  24 or 27 :( forcing odd-y 2nd key candidate)
        return EOSSignature(i, sig.r, sig.s);
      }
    }
  }
```

> signature.js


```
function signBufferSha256(buf_sha256, private_key) {
            if (buf_sha256.length !== 32 || !Buffer.isBuffer(buf_sha256)) throw new Error("buf_sha256: 32 byte buffer requred");
            private_key = toPrivateObj(private_key);
            assert(private_key, 'private_key required');

            var der, e, ecsignature, i, lenR, lenS, nonce;
            i = null;
            nonce = 0;
            e = BigInteger.fromBuffer(buf_sha256);
            while (true) {
                ecsignature = ecdsa.sign(curve, buf_sha256, private_key.d, nonce++);
                der = ecsignature.toDER();
                lenR = der[3];
                lenS = der[5 + lenR];
                if (lenR === 32 && lenS === 32) {
                    i = ecdsa.calcPubKeyRecoveryParam(curve, e, ecsignature, private_key.toPublicKey().Q);
                    i += 4; // compressed
                    i += 27; // compact  //  24 or 27 :( forcing odd-y 2nd key candidate)
                    break;
                }
                if (nonce % 10 === 0) {
                    console.log("WARN: " + nonce + " attempts to find canonical signature");
                }
            }
            return new Signature(ecsignature.r, ecsignature.s, i);
        }
```
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , and 60 others
properties (23)
post_id90,310,312
authorwonsama
permlinkjs-vs-dart-sign
categoryhive-101145
json_metadata{"tags":["hive-101145","sct-kr","sct-freeboard","kr","kr-dev","zzan","sct"],"image":["https:\/\/cdn.steemitimages.com\/DQmWeeaqVfuPnwXNtdTLC7Bu4WPZdf3Fbev54rNe3sAowgM\/image.png"],"app":"steemcoinpan\/0.1","format":"markdown","canonical_url":"https:\/\/www.steemcoinpan.com\/@wonsama\/js-vs-dart-sign"}
created2021-04-09 11:27:33
last_update2021-04-09 11:27:33
depth0
children1
net_rshares29,470,306,356,581
last_payout2021-04-16 11:27:33
cashout_time1969-12-31 23:59:59
total_payout_value35.632 SBD
curator_payout_value28.693 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length2,664
author_reputation957,438,993,824,304
root_title"[개발] 스팀(js) vs 이오스(dart) sign 함수 비교"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
author_curate_reward""
vote details (124)
@sct.krwp ·
@wonsama transfered 10 KRWP to @krwp.burn. voting percent : 8.45%, voting power : 89.46%, steem power : 1744387.21, STU KRW : 1200. 
@wonsama staking status : 1142.929 KRWP
                                @wonsama limit for KRWP voting service : 4.571 KRWP (rate : 0.004)
                                What you sent : 10 KRWP
                                Refund balance : 5.429 KRWP [52735914 - babf2ab948c67e7c30eee887158ec58aec2ec69e]
properties (22)
post_id90,310,357
authorsct.krwp
permlinkre--js-vs-dart-sign-20210409t113024500z
categoryhive-101145
json_metadata{"tags":["hive-101145","sct-kr","sct-freeboard","kr","kr-dev","zzan","sct"]}
created2021-04-09 11:30:27
last_update2021-04-09 11:30:27
depth1
children0
net_rshares0
last_payout2021-04-16 11:30:27
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length441
author_reputation10,000,000,000,000
root_title"[개발] 스팀(js) vs 이오스(dart) sign 함수 비교"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000