ed25519.सार्वजनिक परिणाम विसंगति
यह समस्या ed25519 निजी कुंजी के लिए विभिन्न प्रारूपों से उत्पन्न होती है। कुंजी 32-बाइट बीज के रूप में शुरू होती है जिसे 64 बाइट्स बनाने के लिए SHA512 का उपयोग करके हैश किया जाता है (इस प्रक्रिया के दौरान कुछ बिट्स फ़्लिप किए जाते हैं)।
गोलंग निजी कुंजी प्रारूप
गोलांग निजी कुंजी प्रारूप में 32-बाइट सार्वजनिक कुंजी के साथ संयोजित 32-बाइट बीज शामिल हैं।
बिटोरेंट निजी कुंजी प्रारूप
बिटटोरेंट निजी कुंजी 64- हैं हैश के बाइट आउटपुट या संभावित रूप से केवल 64 यादृच्छिक बाइट्स का उपयोग हैश परिणाम के समान किया जाता है। वह प्रारूप जिसे गोलांग एपीआई स्वीकार करता है क्योंकि हैश प्रक्रिया प्रतिवर्ती नहीं है। आंतरिक पैकेज के आधार पर golang.org/x/crypto/ed25519/internal/edwards25519 बनाया जा सकता है:
निजी कुंजी से सार्वजनिक कुंजी उत्पन्न करने का कार्यfunc getPublicKey(privateKey []बाइट) []बाइट { वर ए एडवर्ड्स25519.एक्सटेंडेडग्रुपएलिमेंट var hबाइट्स [32]बाइट कॉपी(hBytes[:], प्राइवेटकी) एडवर्ड्स25519.GeScalarMultBase(&A, &hBytes) var publicKeyBytes [32]बाइट A.ToBytes(&publicKeyBytes) publicKeyBytes लौटाएँ[:] }
सिग्नेचर जेनरेशन के लिए फंक्शन
func साइन(प्राइवेटकी, पब्लिककी, मैसेज []बाइट) []बाइट { var PrivateKeyA [32]बाइट कॉपी(प्राइवेटकीए[:], प्राइवेटकी) // हमें बाद में एक ऐरे में इसकी आवश्यकता होगी var messageDigest, hramDigest [64]बाइट h := sha512.नया() h.लिखें(निजीकुंजी[32:]) ज.लिखें(संदेश) h.Sum(messageDigest[:0]) var messageDigestReduced [32]बाइट edwards25519.ScReduce(&messageDigestReduced, &messageDigest) वर आर एडवर्ड्स25519.एक्सटेंडेडग्रुपएलिमेंट एडवर्ड्स25519.GeScalarMultBase(&R, &messageDigestReduced) var एन्कोडेडआर [32]बाइट R.ToBytes(&encodedR) h.रीसेट() h.लिखें(एन्कोडेडआर[:]) ज. लिखें(सार्वजनिक कुंजी) ज.लिखें(संदेश) h.Sum(hramDigest[:0]) var hramDigestReduced [32]बाइट edwards25519.ScReduce(&hramDigestReduced, &hramDigest) var s [32]बाइट edwards25519.ScMulAdd(&s, &hramDigestReduced, &privateKeyA, &messageDigestReduced) हस्ताक्षर := बनाओ([]बाइट, 64) प्रतिलिपि(हस्ताक्षर[:], एन्कोडेडआर[:]) कॉपी(हस्ताक्षर[32:], एस[:]) वापसी हस्ताक्षर ) 0eb269d61e3b38e450a22e754941ac78479d6c54e1faf6037881d" const अपेक्षितPublicKey = "77ff84905a91936367c01360803104f92432fcd904a43511876df5cdf3e7e548" const अपेक्षितSig = "6834284b6b24c3204eb2fea824d82f88883a3d95e8b4a21b8c0ded553d17d17ddf9a8a7104b1258f30bed3787e6cb896fca78c58f8e03b5f18f14951a87 d9a08" प्राइवेटकी, _ := हेक्स.डीकोडस्ट्रिंग(प्राइवेटकीहेक्स) सार्वजनिक कुंजी := getPublicKey(निजी कुंजी) keyMatches := अपेक्षितPublicKey == hex.EncodeToString(publicKey) sigMatches := अपेक्षितSig == hex.EncodeToString(sign(privateKey, publicKey, []byte("4:salt6:foobar3:seqi1e1:v12:Hello World!")))
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3