iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0

Hi all, 來到第 11 天,今天就來講講該如何把昨天的公式實作吧。

首先這次會使用到的物件分為三種: HashHelper, EccGenerator, ChameleonHashHelper

HashHelper

這個物件是用來昨雜湊值計算使用,其中我們會透過 SHA256 的方式將輸入值雜湊化。

public abstract class HashHelper
{
    public static BigInteger Sha256(string message)
    {
        var bmsg = Encoding.ASCII.GetBytes(message);
        
        var sha256Digest = new Sha256Digest();
        sha256Digest.BlockUpdate(bmsg, 0, bmsg.Length);
        
        var hash = new byte[sha256Digest.GetDigestSize()];
        sha256Digest.DoFinal(hash, 0);
        
        return new BigInteger(hash);
    }
}

EccGenerator

這個物件會被使用來建立 橢圓曲線加密演算法 所需要的參數,如: 曲線基點與金鑰對等,code 如下:

public static class EccGenerator
{
    public static KeyPair GenerateKeyPair(int keySize)
    {
        var gen = new ECKeyPairGenerator("ECDSA");
        gen.Init(new KeyGenerationParameters(new SecureRandom(), keySize));

        var keyGen = gen.GenerateKeyPair();

        var privateKey = (ECPrivateKeyParameters) keyGen.Private;
        var publicKey = (ECPublicKeyParameters) keyGen.Public;

        var generateKeyPair = new KeyPair()
        {
            PublicKey = publicKey.Q, 
            PrivateKey = privateKey.D,
            BasePoint = publicKey.Parameters.G,
            KeySize = keySize 
        };
        
        return generateKeyPair;
    }
    
}

ChameleonHashHelper

今天的主角,負責計算變色龍雜湊函數及計算訊息簽章的生成與驗證,code 如下:

public static class ChameleonHashHelper
{
    
    public static BigInteger Sign(ChameleonHashRequest request)
    {
        var msgHash = HashHelper.Sha256(request.Message);
        var dn = msgHash.Multiply(request.KeyPair.PrivateKey);
        return request.SessionKey.Add(dn).Mod(request.Order);
    }
    
    public static bool Verify(ChameleonHashRequest request, ECPoint rightChameleonHash)
    {
        return GetChameleonHash(request).Equals(rightChameleonHash);
    }

    public static ECPoint GetChameleonHash(ChameleonHashRequest request)
    {
        var msgHash = HashHelper.Sha256(request.Message);
        var rP = request.KeyPair.BasePoint.Multiply(request.Signature);
        var chameleonHash = request.KeyPair.PublicKey.Multiply(msgHash).Add(rP).Normalize();
        return chameleonHash;
    }

}

Conclusion

上述就是之後計算變色龍雜湊值所需要的Code, 至於該怎麼讓我們的專案做使用,我這邊打算使用 SDK 的方式導入。

在這邊提供:

好啦,今天就到這邊啦~~~

結語: 憂鬱星期二放鬆下哈


上一篇
Day10 Introduce Chameleon Hash
下一篇
Day12 SDK 放送事故…
系列文
Side-Project:: 為自己打造個可編輯的區塊鏈30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言