Функция: sign_hash (хэш, privkey), и вы можете просмотреть код (минус некоторые проверки формата входного сигнала и другие ошибки MISC проверки) Вот.
Вот мои doctests:
(Как вы уже догадались, мне нравятся мои hexstrs)
Код:
>>> sign_hash (sha256 (ByteArray ("Сатоши Накамото", 'UTF-8')),"0000000000000000000000000000000000000000000000000000000000000001")
'3046022100934b1ea10a4b3c1757e2b0c017d0b6143ce3c9a7e6a4a49860d7a6ab210ee3d8022100dbbd3162d46e9f9bef7feb87c16dc13b4f6568a87f4e83f728e2443ba586675c'
>>> sign_hash (sha256 (ByteArray ("Все эти моменты будут потеряны во времени, как слезы в дожде. Время умирать...", 'UTF-8')),"0000000000000000000000000000000000000000000000000000000000000001")
'30460221008600dbd41e348fe5c9465ab92d23e3db8b98b873beecd930736488696438cb6b022100ab8019bbd8b6924cc4099fe625340ffb1eaac34bf4477daa39d0835429094520'
>>> sign_hash (sha256 (ByteArray ("Сатоши Накамото", 'UTF-8')),"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140")
'3046022100fd567d121db66e382991534ada77a6bd3106f0a1098c231e47993447cd6af2d002210094c632f14e4379fc1ea610a3df5a375152549736425ee17cebe10abbc2a2826c'
>>> sign_hash (sha256 (ByteArray ("Алан Тьюринг", 'UTF-8')),"f8b8af8ce3c7cca5e300d33939540c10d45ce001b8f252bfbc57ba0342904181")
'304502207063ae83e7f62bbb171798131b4a0564b956930092b33b07b395615d9ec7e15c022100a72033e1ff5ca1ea8d0c99001cb45f0272d3be7525d3049c0d9e98dc7582b857'
>>> sign_hash (sha256 (ByteArray ("Существует компьютерная болезнь, любой, кто работает с компьютерами, о его знает. Это очень серьезное заболевание, и оно полностью мешает работе. Проблема с компьютером является то, что вы «играть» с ними!", 'UTF-8')),"e91671c46231f833a6406ccbea0e3e392c76c167bac1cb013f6f1013980455c2")
'3045022100b552edd27580141f3b2a5463048cb7cd3e047b97c9f98076c32dbdf85a68718b0220279fa72dd19bfae05577e06c7c0c1900c371fcd5893f7e1d56a37d30174671f6'
>>> sign_hash (sha256 (ByteArray ("Все должно быть сделано как можно более простым, но не проще.", 'UTF-8')),"0000000000000000000000000000000000000000000000000000000000000001")
'3045022033a69cd2065432a30f3d1ce4eb0d59b8ab58c74f27c41a7fdb5696ad4e6108c9022100907f867d799087a2c09be72dbe9c2250a9335f31d94ab034a1f1f4927c021edf'
>>> sign_hash (sha256 (ByteArray ("Уравнения являются более важными для меня, потому что политика в настоящее время, но это уравнение является то для вечности.", 'UTF-8')),"fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140")
'3045022054c4a33c6423d689378f160a7ff8b61330444abb58fb470f96ea16d99d4a2fed022100f8f7dcfbbef10594d6bceee495b1f5543f31278ca75f1a1ea01e936d8e25fc9c'
>>> sign_hash (sha256 (ByteArray ("Мало того, что незнакомец Вселенной, чем мы думаем, что это чужой, чем мы можем думать.", 'UTF-8')),"fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140")
'3045022100ff466a9f1b7b273e2f4c3ffe032eb2e814121ed18ef84665d0f515360dab3dd002206fc95f5132e5ecfdc8e5e6e616cc77151455d46ed48f5589b7db7771a332b283'
'3046022100934b1ea10a4b3c1757e2b0c017d0b6143ce3c9a7e6a4a49860d7a6ab210ee3d8022100dbbd3162d46e9f9bef7feb87c16dc13b4f6568a87f4e83f728e2443ba586675c'
>>> sign_hash (sha256 (ByteArray ("Все эти моменты будут потеряны во времени, как слезы в дожде. Время умирать...", 'UTF-8')),"0000000000000000000000000000000000000000000000000000000000000001")
'30460221008600dbd41e348fe5c9465ab92d23e3db8b98b873beecd930736488696438cb6b022100ab8019bbd8b6924cc4099fe625340ffb1eaac34bf4477daa39d0835429094520'
>>> sign_hash (sha256 (ByteArray ("Сатоши Накамото", 'UTF-8')),"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140")
'3046022100fd567d121db66e382991534ada77a6bd3106f0a1098c231e47993447cd6af2d002210094c632f14e4379fc1ea610a3df5a375152549736425ee17cebe10abbc2a2826c'
>>> sign_hash (sha256 (ByteArray ("Алан Тьюринг", 'UTF-8')),"f8b8af8ce3c7cca5e300d33939540c10d45ce001b8f252bfbc57ba0342904181")
'304502207063ae83e7f62bbb171798131b4a0564b956930092b33b07b395615d9ec7e15c022100a72033e1ff5ca1ea8d0c99001cb45f0272d3be7525d3049c0d9e98dc7582b857'
>>> sign_hash (sha256 (ByteArray ("Существует компьютерная болезнь, любой, кто работает с компьютерами, о его знает. Это очень серьезное заболевание, и оно полностью мешает работе. Проблема с компьютером является то, что вы «играть» с ними!", 'UTF-8')),"e91671c46231f833a6406ccbea0e3e392c76c167bac1cb013f6f1013980455c2")
'3045022100b552edd27580141f3b2a5463048cb7cd3e047b97c9f98076c32dbdf85a68718b0220279fa72dd19bfae05577e06c7c0c1900c371fcd5893f7e1d56a37d30174671f6'
>>> sign_hash (sha256 (ByteArray ("Все должно быть сделано как можно более простым, но не проще.", 'UTF-8')),"0000000000000000000000000000000000000000000000000000000000000001")
'3045022033a69cd2065432a30f3d1ce4eb0d59b8ab58c74f27c41a7fdb5696ad4e6108c9022100907f867d799087a2c09be72dbe9c2250a9335f31d94ab034a1f1f4927c021edf'
>>> sign_hash (sha256 (ByteArray ("Уравнения являются более важными для меня, потому что политика в настоящее время, но это уравнение является то для вечности.", 'UTF-8')),"fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140")
'3045022054c4a33c6423d689378f160a7ff8b61330444abb58fb470f96ea16d99d4a2fed022100f8f7dcfbbef10594d6bceee495b1f5543f31278ca75f1a1ea01e936d8e25fc9c'
>>> sign_hash (sha256 (ByteArray ("Мало того, что незнакомец Вселенной, чем мы думаем, что это чужой, чем мы можем думать.", 'UTF-8')),"fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140")
'3045022100ff466a9f1b7b273e2f4c3ffe032eb2e814121ed18ef84665d0f515360dab3dd002206fc95f5132e5ecfdc8e5e6e616cc77151455d46ed48f5589b7db7771a332b283'
Как вы можете видеть из подписи, значения R соответствуют правильным детерминированным значениям K, но мои значения S не совпадают с тестовыми векторов по ссылке выше. Я надеюсь, что кто-то может дать потенциальную причину. (Или, скорее, я надеюсь, что кто-то скажет мне значение DeathAndTaxes' S является неправильным, так как я на самом деле проверены эти подписи, которые я сделал.)