Secp256k1 von C++ bzw. C# nach VB.NET

  • VB.NET

Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von evolver.

    @RodFromGermany in dem man von 'NBitcoin' übersetzt (was ja reiner C#-Code ist).
    Wenn ich allerdings auch nur versuche, das NuGet-Paket 'NBitcoin.Secp256k1' meinem Programm hinzuzufügen bekomme ich folgende Meldung:

    Quellcode

    1. ​Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    2. Fehler Das Paket "NBitcoin.Secp256k1 2.0.1" konnte nicht installiert werden. Sie versuchen, dieses Paket in ein Projekt zu installieren, das sich auf ".NETFramework,Version=v4.6.1" bezieht, das Paket enthält aber keine Assemblyverweise oder Inhaltsdateien, die mit diesem Framework kompatibel sind. Wenden Sie sich an den Paketersteller, um weitere Informationen zu erhalten.

    Das ist warscheinlich auch der Grund, warum es dort so viel abgekündigtes Zeug drin gibt. Und das es mit Hilfe dieses Forums schon einmal geklappt hat, weiß ich von Curve25519 von C# nach VB.NET
    So wie es aussieht ist das Secp256k1-Projekt in net6.0 und netstandard2.1 geschrieben.

    VB.NET-Quellcode

    1. <TargetFrameworks>net6.0;netstandard2.1</TargetFrameworks>

    github.com/MetacoSA/NBitcoin/b…NBitcoin.Secp256k1.csproj

    Anscheinend kann man dort den Methoden auch eine ReadOnly Zuweisung machen.

    Wenn du mit einer niederen Version von .Net arbeitest, wäre meine erste Vorgehensweise erst mal zu versuchen, diese ReadOnly's zu entfernen, sofern das geht. Es gibt aber sicher einen Grund warum die geschrieben werden. und das müsste halt wenn man es schlussendlich zum Laufen bringt noch zusätzlich beachtet werden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    Ehrlich gesagt habe ich mir das Ganze gar noch nicht richtig angeschaut. Ich weiss also gar nicht was da alles zusammenhängt. Leider kann ich aber mit Net6.0 noch gar nichts anfangen, da ich immer noch mit VS 2017 arbeite.

    Fakt ist aber, dass C# nie eine Möglichkeit wie Properties mit Parameterliste anbot. Vielleicht ist das ja die Alternative.
    In Vb.Net ist es ja problemlos möglich.

    Und im Moment fehlt mir auch ein bisschen die Zeit dafür, da ich an einem anderen Projekt arbeite. Interessant wäre es aber schon, und voraussichtlich erst in einem Monat möglich, wenn überhaupt.

    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    Frohes Neues Jahr erst einmal,

    exc-jdbi schrieb:

    ... da ich immer noch mit VS 2017 arbeite.

    ja, das nutze ich auch.

    exc-jdbi schrieb:


    ... Interessant wäre es aber schon, und voraussichtlich erst in einem Monat möglich, wenn überhaupt.

    Freundliche Grüsse

    exc-jdbi

    Ich würde gerne noch mal darauf zurückkommen, da mich das ebenfalls Interessiert. Konkret würde ich gerne ein individuelles Bitcoin Script ausprobieren:

    Quellcode

    1. lockingscript / scriptpubkey: OP_SHA256 <TestHash> OP_EQUALVERIFY OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
    2. unlockingscript: <sig> <pubKey> <TestKey>

    Dafür benötige ich allerdings die Signierfunktion in VB.NET und dann ist es warsch. immer noch ein weiter Weg.

    Grüsse gehen zurück

    evolver schrieb:

    Was für ein Wahnsinn...


    Sieht so aus, als ob du die halbe runtime in dem Ordner hättest. Ich glaube nicht das dies allein durch secp256k1 passiert.

    docs.microsoft.com/de-de/dotnet/core/deploying/
    Die Veröffentlichung als eigenständige App erzeugt eine
    Anwendung, die die .NET-Runtime und die Bibliotheken, Ihre Anwendung und
    zugehörige Abhängigkeiten enthält. Benutzer der Anwendung können diese
    auf einem Computer ausführen, auf dem die .NET-Runtime nicht installiert
    ist

    @Takafusa Jou.
    @evolver Ist das .NET 5 oder .NET 6?
    Wie ist Dein Projekt eingestellt?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @evolver Nuget-Pakete sind anders benannte ZIP-Dateien.
    Mach das ganze rückgängig (oder erstell ein neues Projekt mit dem Vorher-Zustand).
    Benenne das Nuget-Paket um:
    *.nupkg => *.nupkg.zip
    öffne es im explorer, hole genau die eine von Dir benötigte DLL raus (wahrscheinlich im Verzeichnis lib\net40), füge sie Deinem Projekt als Verweis hinzu und feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja, im lib-Ordner lagen diese tatsächlich. Danke dafür.
    Grundsätzlich drehen wir uns jedoch im Kreis...

    RodFromGermany schrieb:

    evolver schrieb:

    ...
    mir schwebt vor, gar keine DLL mehr benutzen zu müssen.
    ...
    ...
    Wie soll das funktionieren?
    ...

    Ich brauche da wohl jmd, der C/C++ kann und das irwie ins VB.NET übersetzen kann. Bin ich dafür überhaupt im richtigen Subforum?

    evolver schrieb:

    der C/C++ kann und das irwie ins VB.NET übersetzen kann.
    Wo kommt denn der C/C++-Code her?
    Und:
    Übersetzen kann man da nix, bestenfalls übertragen.
    Besser wäre es, eine CLI-DLL zu bauen und dort diesen Hode hineinzupacken.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @evolver Das wäre vielleicht ein Problem für das vb-paradise.de/index.php/Board/931-marktplatz-jobboerse/
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ich habe mich mal wieder etwas mit Bitcoin beschäftigt und dafür die secp256k1.dll und ​Secp256k1.Net.dll dafür benutzt. Leider musste ich dabei feststellen, dass diese scheinbar gar nicht funzen. Jedenfalls bekomme ich vom Bitcoin-Netzwerk immer eine Fehlermeldung die mit der elliptischen Kurve im Zusammenhang steht:

    Quellcode

    1. ​bitcoin-cli -testnet sendrawtransaction "010000000185b83bf941ad7f483cd7f9db197bfe360aa6bed86fd4887176039e2c661e3a79010000006c493044022056a0704e7bcd7e2080fef238363ed6d8f7e5434c8d8d017075a37e1dd3598fbb02203a20514b37c93bd0a54dc059c47cbcece4ee943cf022ec8391233d9bf89144ef000001210376c86a465372d0cda6d24190fad57c9efc1bdbcbfa36ad7050820b03f66f248bffffffff0128230000000000003ca820c954dcab5d5bde741a75b5d46bb651a2fd06e0b98a01fcf4f27d537aa1ced5718876a91483da609ce4a866fb27fb141078477e693911a23f88ac00000000"
    2. error code: -26
    3. error message:
    4. mandatory-script-verify-flag-failed (Non-canonical DER signature)


    der Weg scheint noch sehr weit zu sein...
    viele Monate sind vergangen und ich habe mich immer wieder mal mit dem Thema beschäftigt und viel dazugelernt. Das Non-canonical-Problem konnte ich mit viel Recherche im Internet lösen. Des Pudels Kern der Lösung sieht so aus (geht bestimmt eleganter):

    VB.NET-Quellcode

    1. Dim Threshold As Byte = HEXStringToByteArray("7f")(0)
    2. Dim First_R_Byte As Byte = HEXStringToByteArray(R_Str.Substring(0, 2))(0)
    3. Dim First_S_Byte As Byte = HEXStringToByteArray(S_Str.Substring(0, 2))(0)
    4. While First_R_Byte >= Threshold Or First_S_Byte >= Threshold
    5. Bitcoin_Signature = Sign(HEXStringToByteArray(PrivateKey), T_Part_Hash)
    6. R_Str = Bitcoin_Signature.R.ToString
    7. S_Str = Bitcoin_Signature.S.ToString
    8. First_R_Byte = HEXStringToByteArray(R_Str.Substring(0, 2))(0)
    9. First_S_Byte = HEXStringToByteArray(S_Str.Substring(0, 2))(0)
    10. End While


    Der exc-jdbi hat mir dabei sehr dabei geholfen, vom C# Code weg, hin zu VB.NET zu kommen. Ein kleiner C++ Rest bleibt jedoch noch übrig bei der Sache (da ich den Hide-show-button nicht finde habe ich die C++ Datei im Anhang angefügt)
    Dateien
    • secp256k1.cpp

      (33,32 kB, 28 mal heruntergeladen, zuletzt: )