Python bindings to libsecp256k1
To install (and/or upgrade):
python -m pip install --upgrade btclib-secp256k1
Quickstart
Sign and verify, ECDSA and BIP340. Every line below is executed by the test suite, on every interpreter and every kind of wheel, so an example that stops working fails a build rather than sitting here:
>>> import hashlib
>>> from btclib_secp256k1 import dsa, keys, ssa, xonly
>>> # BIP340 test vector 1; yours comes from os.urandom or a wallet
>>> prvkey = 0xB7E151628AED2A6ABF7158809CF4F3C762E7160F38B4DA56A784D9045190CFEF
>>> pubkey = keys.pubkey_from_prvkey(prvkey)
>>> msg = hashlib.sha256(b"hello").digest()
ECDSA, over the 32-byte hash, with the deterministic RFC6979 nonce:
>>> signature = dsa.sign(msg, prvkey)
>>> dsa.verify(msg, pubkey, signature)
True
BIP340 Schnorr, over the same hash, against the x-only key:
>>> xonly_pubkey, parity = xonly.from_pubkey(pubkey)
>>> signature = ssa.sign(msg, prvkey)
>>> ssa.verify(msg, xonly_pubkey, signature)
True
Both take the private key as bytes or as an int, and both return
bytes. What each argument may be, and what is refused rather than
coerced, is What the boundary checks below; every function states its
own contract in its docstring.
Versioning
btclib-secp256k1 version numbers track the wrapped libsecp256k1 version: release M.N.P wraps libsecp256k1 vM.N.P, and the vendored library is v0.8.0. When a new release of the bindings is needed while still wrapping the same libsecp256k1 version, a fourth number is appended: 0.8.0.1, 0.8.0.2, etc.
secp256k1-zkp (btclib-org/btclib-secp256k1#603) is vendored beside
secp256k1, not in place of it, and carries no release of its own to
track: it is pinned at
a8f6b86a,
on fametrano/secp256k1-zkp rather than on
BlockstreamResearch/secp256k1-zkp directly (#828) -- the commit that
exposes secp256k1_borromean_verify as a public function, internal
linkage there keeping it out of BlockstreamResearch/secp256k1-zkp's own
built library. Proposed upstream as
BlockstreamResearch/secp256k1-zkp#373,
not yet merged. The published wheels do not build against this submodule
at all; #605 is what reads it. A re-pin is a pull request of its own,
reviewing the delta against the commit named here.
The name
This package was btclib_libsecp256k1 up to and including 0.7.1.3, and
0.8.0 is the first release under this name. lib named the C library
being wrapped, and a python distribution is not that library: it is
btclib's bindings to secp256k1, which is what the name now says.
Nothing on PyPI bridges the two, deliberately: btclib_libsecp256k1
stops at 0.7.1.3 and stays installable, wrapping libsecp256k1 0.7.1, and
pip install btclib_libsecp256k1 keeps resolving to it rather than
following the rename. Moving means changing the requirement and the
import, which spell the new name differently: the requirement takes the
distribution's hyphen and the import the package's underscore.
-btclib_libsecp256k1>=0.7.1.3
+btclib-secp256k1>=0.8.0
-from btclib_libsecp256k1 import dsa, keys, ssa, xonly
+from btclib_secp256k1 import dsa, keys, ssa, xonly
The two can be installed side by side while that happens: the import
package was renamed with the distribution, so neither shadows the other.
Everything inside the API — the module names, every function, and the
ffi and lib a caller reaches MuSig2 through — is unchanged.
Design
These bindings are a boundary, not a library: every function is one
libsecp256k1 call, with its arguments validated first and its return
code checked. A function returning a key or a signature calls it twice:
libsecp256k1 hands back an opaque object — a secp256k1_pubkey, a
secp256k1_ecdsa_signature — that only a second call serializes into
bytes, no libsecp256k1 call producing them directly.
keys.pubkey_from_prvkey is secp256k1_ec_pubkey_create followed by
secp256k1_ec_pubkey_serialize; every other function returning a key or
a signature has the same shape, the second call being the serialization
the first cannot do rather than a second decision.
A function that does make a second decision is named after both of them
and is here for one reason: what the composition saves is the crossing
between its halves, which is the caller's cost and not its own choice.
xonly.from_prvkey is the private key's public key and then the x of
it; keys.pubkey_tweak_mul_sum is a pubkey_tweak_mul per term and one
pubkey_sum over them, which is the multi-scalar multiplication a
verification equation is written as, with no product serialized on its
way into the sum. Neither computes anything libsecp256k1 does not: the
arithmetic is upstream's calls in the order the equation names them, and
Parsing the key once below is where the crossing they save is
measured. One entry point is more than a composition, and it is
dsa.sign(grind=True): a loop that signs again, with a counter mixed
into the nonce, until r is the low one. That is Bitcoin Core's
CKey::Sign and not a scheme of this package's — a signer's size policy,
which is why it is asked for and never done by default — and Grinding
for a low r below is where its cost, and the reason the loop is python
rather than C, are measured. The cryptography —
the algorithms, the constant-time
implementation, the side-channel hardening — is upstream's, and none of
it is reimplemented, extended or second-guessed here. Wrappers of the
same C library cannot honestly differ in what it computes, nor in how
fast; where they can differ is the boundary, and that is where the work
went:
- what runs is known: the version number names the libsecp256k1 being
wrapped (see Versioning), pinned as a submodule and compiled from
source with every optional module requested explicitly, upstream
defaults not being part of its API.
__version__describes the C code underneath, not the wrapper around it - the surface is complete: every optional module is compiled in and
reachable, through a validated binding where a function suffices and
through the raw
libwhere only an object would do (see Wrapped modules). What is absent — the ECDH hash callback, linking a system library — is absent by recorded decision, not by omission - no input can take the process down: the bindings validate before
calling, so a malformed key or signature raises
ValueErrornaming the check that failed, before the C call could meet it; and the vendored build replaces the abort()ing libsecp256k1 default callbacks, so even an illegal argument handed tolibdirectly is survived,context.check()reporting it verbatim. What that validation is, and what it deliberately is not, is What the boundary checks below - side channels are the context's problem, and it is handled: the one shared context is randomized at import time, before any thread exists; concurrent use is documented and tested, free-threaded interpreter included (see Thread safety)
- the boundary is typed:
py.typedships, mypy runs in strict mode, and the cffi extension itself is described by a hand-written stub, so what downstream type-checks against is the real signatures rather thanAny - validation is independent: the tests are published vectors (BIP340, RFC6979, third-party fixtures) and invariants over derived inputs, never the downstream library these bindings exist to serve; branch coverage is ratcheted at 100%, with only the unreachable excluded from the measure
- provenance is checkable: every wheel and the sdist are built and
tested in public CI from the pinned source, and published by the
workflow itself through Trusted Publishing with PEP 740 attestations
— no long-lived token, and no maintainer laptop in the path. The sdist
attached to the GitHub release carries a build provenance attestation
besides, which
gh attestation verifychecks; SECURITY.md has the command
Which library answered is read off the import line. Everything outside
btclib_secp256k1.zkp is
libsecp256k1; everything
under it is
secp256k1-zkp,
the fork of it carrying the confidential-assets and adaptor-signature
work mainline does not. A namespace rather than an argument on each
call, because the libraries overlap by name and not by API: musig is
in both, and the fork's is mainline's entry points plus the ones its
adaptor signatures need, so one musig would name both and an import
line could not say which was reached — outside zkp it is mainline's
that answers.
The default of the flag that builds the fork flips — the published
wheels then carrying secp256k1-zkp — at the first of the events
btclib-org/btclib-secp256k1#603 names, and not before:
"BlockstreamResearch/secp256k1-zkp cuts a tag, which gives the pin a
release to anchor the vendored-source review against", or "btclib
acquires a run-time caller of anything under zkp". Versioning above
names the commit the fork is pinned at, and Build below the flag.
What the boundary checks
Every wrapper validates its arguments before calling, and what it validates is deliberately narrow: the boundary checks what C cannot see, and decides nothing else.
- sizes are checked here, because nothing else can. libsecp256k1
takes bare pointers whose length is in the parameter name —
msg32,input32,seckey— and reads a fixed number of bytes from them. Hand a 32-byte parameter 20 bytes and it reads past the end, and no return code or callback of the library can report it: the length never reached C to be checked. This is memory safety rather than cryptography, and it is the one part that cannot be left to the caller — a binding that reads adjacent heap into a signature when handed a shortbyteswould be safe only for the single caller who remembers to check first - and the type is checked with the size, that check being one
question.
lenanswers for abytearrayand amemoryviewas readily as forbytes, so a size check on its own let both through, and cffi refused them one call later in its own words and about a ctype — naming neither the argument nor what was wrong with it. What crosses is octets:bytes,bytearrayormemoryview, plus anintwhere a scalar is named. Anything else is refused here and called by the name the signature gives it — theTypeErrorthese wrappers raise, every other refusal below being aValueError. The three are not a leniency of the kind refused above: each states a value and a width, so nothing has to be disbelieved and nothing supplied — theintis the wider door of the two, the 32-octet width being the curve's. What they are not is passed through. The copy is taken at the boundary, so a caller holding a secret in memory they can overwrite — which is the reason to reach for abytearrayat all — cannot change what libsecp256k1 is about to read - validity is libsecp256k1's to decide, and it does. Whether 32 bytes
are a scalar in
[1, n-1]is answered bysecp256k1_ec_seckey_verify, andkeys.prvkey_verifyis that call, not a reimplementation of it. A public key becomes one by passingsecp256k1_ec_pubkey_parse, a signature bysecp256k1_ecdsa_signature_parse_der, a tweak by the return value of the function applying it; theValueErrornames what the library refused. No wrapper here knows the curve order - and a caller validating its own input gets a verdict, not an
exception.
keys.prvkey_verify,keys.pubkey_verify,xonly.pubkey_verifyanddsa.signature_verifyare the four: the same proof theparsebeside each of them makes, with nothing kept and nothing to catch. A library holding octets at its own boundary has its own word for what is wrong with them, and an exception carrying this package's word for it is a message it would have to translate. The length is part of the verdict — 34 octets are no public key, and answeringFalseis what a caller asking "do I have one" wants — where every entry point that goes on to use the key raises instead - nothing is normalized into validity. An argument of the wrong size
raises, and is never padded: the 32 bytes of nonce entropy are 32 bytes
or omitted, a shorter value being a caller mistake rather than a small
number. They are
aux_rand32in every module that takes them, BIP340's own name for the pair libsecp256k1 spellsndatahere andrnd32there, and what omitting them means is the one thing that differs: fresh randomness where BIP340 and BIP324 ask for it, and the RFC6979 nonce alone where ECDSA leaves it deterministic. Taking a public key in any of its serializations is not a leniency of that kind and is worth the distinction: BIP340 verification (ssa.verify) and taproot tweaking (xonly.tweak_add,xonly.tweak_add_check) take 32, 33 or 65 octets because02 || x,03 || xand04 || x || yare one key —lift_xis the even-y point whatever form the x arrived in, and a signer whose point has odd y signs withn - dfor that reason. The y is not consulted rather than guessed at, andxonly.from_pubkeyanswers which form was handed in for a caller that wants to know. A leniency is a guess at what the caller meant, and that decision is theirs to make.dsa.verify(..., normalize=True)is that decision made, rather than an exception to it: ECDSA signatures are malleable, which of the two forms one carries was the signer's choice, and a caller checking signatures it did not make says so in the call instead of round-tripping the signature throughdsa.normalizeand back into DER. Off, which is the default, a signature outside the lower-s form is refused as before - the one convenience is the int scalar, and it widens nothing. A
private key or a tweak may be given as an
int, checked against0 <= num < 2**256and serialized big endian. This is not the padding refused above: a shortbytesstates a value and a width, and accepting it means choosing which of the two to disbelieve, while anintstates only a value — the 32-byte width is the curve's, not a fact the caller supplied and got wrong. The set of valid scalars is unchanged; only the type spelling them is. What the door is for is the caller who already holds a number: a nonce, a vector, a tweak just computed. The cost is not in that serialization, which is a loop over nine CPython digits and measures as noise. It is that anintholding a secret was produced by python arithmetic, variable in time with the magnitude of its operands and leaving unzeroized copies of every intermediate on the heap — and that happened before this binding saw the value.bytesis not zeroized either, so what passing them buys is narrow but real: no arithmetic on the secret happened here. Scalar arithmetic that must not leak belongs where that can be promised
None of these checks branches on the content of a secret — they look at a
type, a length, or a magnitude, all of which the caller knows already —
so the constant-time guarantee is the C call's, and it is intact. What
python cannot give back is what happens on either side of that call:
bytes is not zeroized either, and
SECURITY.md
records both limits as inherent.
And there is a way past all of it: lib and ffi are exported, and a
call made through them has no python in front of it whatsoever. It is
the path for a caller who wants the library and nothing added to it --
musig included, nothing stopping a caller from driving a MuSig2 session
through lib directly the way musig.py itself does underneath.
Parsing the key once
A public key crosses this boundary as octets, and every wrapper taking
one begins by parsing it — for a compressed key that is a field square
root, which is a measurable part of the verification that follows it. A
caller that has already paid for that parse can hand it on instead of
paying again: keys.parse returns the libsecp256k1 object, and every
wrapper whose first act is to build one has a half that takes it in
place of the octets.
That half is spelled _foo_, and both underscores are load-bearing. The
leading one says private, and means it: an object is a promise no
argument check can hold a caller to, so what answers for a wrong one is
libsecp256k1's own illegal-argument callback, and a caller reaching for
these is past the boundary that proves things. The trailing one says
which kind of private — _verify_ takes a parsed key where _parse_der
is an ordinary helper.
A private half does not read that callback, and what it answers when
libsecp256k1 refuses its object is therefore whatever the C call
answered: its own exception where a return code allowed one, and
otherwise a value that means nothing — False from a verification, an
ordering from a comparison, None from a sum, and, in ecdh, 32 bytes
that are a shared secret with nobody. Nothing raises in those four.
context.check() immediately after the call is what says so, and
proving the object once — keys.parse built it, or keys.pubkey_verify
answered for the octets it came from — is what makes the question moot.
The public half has no such case, having parsed its own octets, and that
is the whole of what a caller gives up by reaching past it.
>>> ecdsa_sig = dsa.sign(msg, prvkey)
>>> parsed = keys.parse(pubkey) # a valid point: proved once
>>> parsed_sig = dsa.parse_der(ecdsa_sig)
>>> dsa._verify_(msg, parsed, parsed_sig) # used, rather than proved again
True
The public half is the private one with a parse in front of it, and
nothing else about the two differs: the remaining arguments are checked
exactly as before, a bare pointer's length being what no C return code
can report. The callers this is for are the one that validates a key and
then verifies with it, the one checking several signatures against a
single key, and the one asking is_low_s about a signature it is about
to verify. xonly.parse is the same thing for the x coordinate BIP340
verifies against, dsa.parse_der and dsa.parse_compact for the two
serializations of a signature, and every one of them has a serialize
beside it turning the object back into octets.
The other side of the boundary is spelled the same way. A wrapper that produces an object — recovering a key from a signature, decoding it, deriving it, adding keys together, signing — serializes what libsecp256k1 handed it already made, and its private half answers with the object instead:
>>> from btclib_secp256k1 import recovery
>>> sig, recid = recovery.sign(msg, prvkey)
>>> parsed_recoverable = recovery.parse_compact(sig, recid)
>>> recovered = recovery._recover_(msg, parsed_recoverable) # the point
>>> dsa._verify_(msg, recovered, parsed_sig) # as it stands
True
So _foo_ means one thing in both directions: the half that speaks in
libsecp256k1 objects, where the public half speaks in octets. What it
buys is what composing two wrappers otherwise pays between them — a
serialization of a point that was already in hand, and a parse of what
was just serialized, which for the compressed form is that square root
again. Sorting keys and then adding them together is the composition
that pays it per key; scanning block after block for a silent payment
pays it per transaction, which is why silentpayments has a private
half beside its entry points, the summary of a transaction's inputs
included.
Some compositions are an entry point instead of two halves, where what
the caller wanted was the composition. xonly.from_prvkey is the
x-only public key of a private key — the two halves above composed,
which is what BIP340 and BIP341 ask for and what this package used to
make every caller spell in two steps, with a full public key in the
middle that nothing wanted. keys.pubkey_tweak_mul_sum is the other:
a term per scalar and one sum over them, which is a verification
equation, a MuSig2 aggregate key and BIP352's tweak data, and where the
crossing is per term — every product serialized as 65 octets only for
the sum to parse them again. Handed over whole it is about a seventh of
the call from three terms up and stays there, 64 terms 459.3 µs against
536.5; the CHANGELOG entry that added it has the count-by-count table
and the conditions. It is the naive form and not a batched algorithm:
secp256k1_ecmult_multi_var is internal to libsecp256k1 and not
declared in its public header, so what is saved here is the crossing,
which is flat in the number of terms.
ssa.Signer.pubkey reads that same key off the keypair the signer
already holds, which is a read rather than a multiplication, and so is
cheaper than any composition could be.
Outposts past the boundary
The private halves above hand one object from a call to the next. What they do not answer is the caller who crosses the boundary again and again with the same key: a signer signing message after message, a wallet walking a BIP32 path one index at a time. Each crossing pays the conversion at its far end — a keypair is a point multiplication, a compressed key is a field square root — and pays it for a key it had already converted.
ssa.Signer and keys.PubkeyTweakChain are the two outposts on that
side of the boundary held for that reason. Each holds the converted
object across calls, so the conversion happens once and every crossing
afterwards carries only what changes: a message, a tweak. musig's
KeyAggCache, Session and SecretNonce hold state too, and for a
different reason the rule below makes precise.
The two are not worth the same, and the numbers below say which is which. A keypair is arithmetic — a point multiplication, half of what a signature costs — and no serialization would give it back. A parsed public key is a parse, and the caller can make that parse cheap by carrying the uncompressed form instead: 0.269 microseconds against 2.326. So the signer saves what nothing else can, and the chain saves what a caller free to choose its serialization could have saved itself.
The rule that separates them is the test a proposal for a third one would have to pass, and it is worth stating on its own, because the answer to every proposal of that kind — a held public key for verifying, for ECDH, for combining — is here rather than in the proposal:
what an object saves is the cost of rebuilding, from octets, whatever it holds. It earns its state when that cost is arithmetic, and does not when it is a parse.
musig's three do not answer to this rule, and are not measured against
it below: there is no octets form of a keyagg cache, a session or a
secret nonce to rebuild from in the first place, musig.py's own module
docstring saying why. What decides that exception is #87's own test —
"a handle is a lifetime someone has to own and invalidate" — which
ssa.Signer and keys.PubkeyTweakChain never had to pass, holding an
object this package could equally have handed back as bytes.
The saving is not merely bounded by that cost; it is that cost, and by
construction rather than by measurement. ssa.sign builds the keypair,
signs with it and wipes it; signer.sign is that middle term with the
first already paid — so the difference between them is
secp256k1_keypair_create on any machine, and what the numbers below
add is that nothing else of consequence sits in it. They are the ones
this section already states: 15.82 microseconds against the signer's
8.27, of which the keypair is 7.55, and 15.82 − 8.27 is that 7.55.
The chain reads the same way and answers differently, which is the distinction of the paragraph above arrived at from the other end. What it saves is the parse it holds, so which parse decides the figure — and that is the pair the paragraph above states, the caller's to choose by the serialization they carry. A keypair offers its caller no such choice.
Some things the rule needs said, or it reads as narrower than it is. The
first is what recovers a parse, and it is keys.parse itself, not a
cheaper serialization. The argument through the uncompressed form does
not reach an x-only key, which is a field square root to rebuild and has
no second serialization to escape to — and it does not always reach a
full one either, which is what the walk below measures: from the 33
octets an xpub carries, reaching the uncompressed form costs a
reserialize that the chain does not pay. A caller who wants the parse
held holds it — keys.parse hands back the object and the private
halves take it, which is what "the private halves above hand one object
from a call to the next" already promised. What a class would add there
is a name, not a saving. The second is the other side of the ledger:
this package is stateless by construction, and
musig.KeyAggCache and musig.Session are its exception, each an
object with an owner and an invalidation and, Thread safety
says, its own answer to sharing one across threads. What the rule above
does not weigh is ergonomics — the line a caller does not have to write
is real, and belongs with the caller along with the lifetimes.
So the numbers confirm the rule rather than establish it, and it is worth being clear which of them would survive a different machine. Not the microsecond counts, which are one laptop's; the identity is what carries, and it carries because it is structural rather than because a ratio travels better than an absolute. A rule resting instead on which of two measurements is larger would invert on the first machine that measured them differently — and one such pair is a rounding error apart, which the walk below is about.
ssa.Signer holds the keypair:
>>> messages = [hashlib.sha256(bytes([index])).digest() for index in range(3)]
>>> with ssa.Signer(prvkey) as signer:
... signatures = [signer.sign(each) for each in messages]
>>> [ssa.verify(m, xonly_pubkey, s) for m, s in zip(messages, signatures)]
[True, True, True]
ssa.sign builds that keypair, signs with it and overwrites it before
returning, so a caller signing a second message under the same key builds
it again — and it is about half of what a BIP340 signature costs here,
15.82 microseconds against the signer's 8.27, of which the keypair is
7.55. signer.pubkey() reads the x-only key off it rather than deriving
it a second time.
keys.PubkeyTweakChain holds the parsed point:
>>> tweaks = [hashlib.sha256(bytes([index])).digest() for index in range(5)]
>>> chain = keys.PubkeyTweakChain(pubkey)
>>> path = [chain.tweak_add(tweak) for tweak in tweaks]
>>> path[-1] == chain.pubkey()
True
That is a BIP32 path walked one index at a time, and the shape of it is
what costs: each step needs the previous step's serialized key to hash
into the next tweak, so pubkey_tweak_add on the compressed form parses
at every step the very point the step before had built and serialized —
64.62 microseconds against the chain's 55.14, for the five steps above,
which is the 2.326 of a compressed parse saved four times.
What that comparison leaves out is the caller's other move, and it is
worth stating because it is nearly free: walking the same path in the
uncompressed form and compressing each answer in python is 54.75, which
is the chain's 55.14 within the noise. The uncompressed parse is 0.269,
so there is almost nothing left for holding the point to save — the
chain's saving is real against the compressed walk and a rounding error
against that one, where the caller already holds the 65 octets — which
two paragraphs below is the assumption that turns out to decide it. What
it is unambiguously worth is not having to write
bytes([2 + (sec[64] & 1)]) + sec[1:33] where BIP32 wants 33 octets to
hash. chain.pubkey() is the key it has arrived at, and
chain._pubkey_() the point itself for a caller handing it on.
The two moves do not compose into a third saving, which is worth saying
because the shape of them invites it. A chain answers whichever
serialization it is asked for, but it re-parses nothing in either: the
point is what it holds. So chain.tweak_add(compressed=False) saves no
parse that chain.tweak_add() had been paying, and gives back the line
above to be written at every step — it measures slightly slower, for the
serialization and that line, and it is not the spelling to reach for.
What the three numbers do leave unasked is where the walk starts. An
xpub carries the 33 octets, so a caller taking the uncompressed path
reaches its starting form through keys.reserialize — a compressed
parse, the 2.326 above, and a serialization — before the first step,
and that is rather more than the 0.39 separating the two walks. Counted
from the key a BIP32 caller actually holds, the chain is ahead of the
uncompressed walk rather than a rounding error behind it: the parse it
pays at construction is the one that caller could not have avoided, and
it pays it once where the compressed walk pays it five times. Which
does not make the chain's saving arithmetic — this section's distinction
stands — but it is the parse the caller could not make cheap, which is
the case the class is for.
What the two do not share is what they hold. A parsed public key is a
public value a caller may keep for as long as it likes; a keypair is the
private key in libsecp256k1's own layout, so the signer hands the caller
a lifetime and not only a saving. That is what the with block is for:
on the way out of it the keypair is overwritten, whether the block ended
in a signature or in an exception, and a wiped signer refuses to sign
rather than signing with the zeros left behind. signer.wipe() is the
same instruction spelled by hand, for a caller who is done before the
block is. The chain needs none of it, and has none of it. What none of it
changes is the python side: the bytes or int the constructor is
handed is a python object like any other, and
SECURITY.md
records why that copy cannot be taken back.
ECDSA has no counterpart, and the reason is in the equation rather than
in the C signature. BIP340 challenges with e = H(R ‖ P ‖ m), so the
public key is an input to every signature: it has to be derived, which
is a point multiplication, and the keypair is where it is kept — with
the parity that decides whether the signature is made with d or with
n - d. ECDSA signs s = k⁻¹(z + r·d), and P appears nowhere in it.
There is no object derived from the key, and so nothing to hold across
calls.
What a dsa.Signer could save is the argument check scalar makes of
the private key: 0.117 microseconds of the 12.93 a signature costs, where
ssa.Signer saves the 7.55 of 15.82. What it would cost is the lifetime
the paragraph above describes, a second copy of the secret held for as
long as the signer is. That trade is worth making for half a signature
and not for a hundredth of one.
The other ground such a signer could be argued on is the memory, and
it needs no signer. Where a scalar is accepted — a private key, a tweak
— a cffi array of 32 octets is accepted too, and where the call only
reads it libsecp256k1 is handed the caller's own memory. So a caller
signing again and again under one key can hold it in
ffi.new("unsigned char[32]"), wipe that when done, and have no bytes
of the key made per signature. It is the only argument of these bindings
that is not copied on the way in, and the trade is stated where the
copying one is: the copy bytes and bytearray get is also what stops
the caller changing the octets libsecp256k1 is reading, and a caller who
hands in memory instead of a value has taken that on.
SECURITY.md
carries it with the wipe that goes with it.
Which item type the array was declared as does not matter — char,
unsigned char, uint8_t, signed char — because what crosses is a
re-view of those octets rather than a conversion of them. What is refused
is a pointer, whose length is not the pointer's own to know, an array of
wider items, which is this machine's byte order rather than a scalar, and
any length but 32.
Some calls copy it, and are meant to. keys.prvkey_negate,
keys.prvkey_tweak_add and keys.prvkey_tweak_mul copy because
libsecp256k1 writes the answer through that pointer.
zkp.generator.pedersen_blind_generator_blind_sum copies for that
reason too: secp256k1-zkp writes the correction through the last element
of its blinding_factor array, which the header declares In/Out. The
sender side of silentpayments, zkp.generator.pedersen_blind_sum and
that same call copy because this package wipes what it copied on the way
out. Handing any of them the caller's memory would negate, overwrite or
zero the secret they passed, so a copy is owed. _secret.scalar_buffer
takes it where mainline's own ffi allocates; the two in
zkp.generator take theirs through the subpackage's ffi, which is
what every array there is built through. Those of them that answer a
new secret take a keyword-only into, which is the other facility's
question rather than this one's — it is how that secret comes back into
a buffer instead of a bytes. The sender side of silentpayments takes
none: what silentpayments.create_outputs answers is the x-only public
keys of the outputs, no entry point of that module has an into at all,
and the copy it takes is owed for the wiping reason alone.
Where that binds is not the signing, which never asked: the private
halves hand libsecp256k1 the pointer, so a key in a buffer reached
_signed before this and reaches it now. It binds on the derivation —
keys._pubkey_from_prvkey_ asks for a scalar — and the sharpest case is
the failing branch of the check above, which derives in order to tell a
wrong argument from a fault: with the key in a buffer it used to answer
TypeError: the private key must be bytes or an int, telling a caller
they had mistyped the argument they had passed correctly. Which is the
reason the door is open, rather than the microsecond a signer would have
hoisted.
What does cost in dsa.sign is the DER serialization, 0.757
microseconds, and a caller who wanted the other form never has to pay it:
compact=True answers the 64 octets of r ‖ s directly, where reaching
them through to_compact writes the DER and parses it straight back.
Checking the signature before answering with it
dsa.sign, ssa.sign and recovery.sign check what they just made
against the very key that made it, and a signature that fails is raised
on rather than returned. It is the one argument here that defaults to
on, and verify=False is how a caller declines it.
The three have the same reasoning behind them and did not arrive by the
same route. For BIP340 it is a step of the algorithm: Default Signing
ends with "If Verify(bytes(P), m, sig) returns failure, abort", and the
note beside it says why — "Verifying the signature before leaving the
signer prevents random or attacker provoked computation errors. This
prevents publishing invalid signatures which may leak information about
the secret key. It is recommended, but can be omitted if the computation
cost is prohibitive." Schnorr is linear, so what leaks is not vague: two
signatures over one nonce and two challenges give up d by subtraction.
For ECDSA no standard asks for it and Bitcoin Core does it anyway, at the
end of CKey::Sign, under a comment reading "Additional verification
step to prevent using a potentially corrupted signature" — and Core
offers no way to turn it off, where this does.
What it catches is not a bad argument: those have all raised by the time it runs. It catches the computation itself going wrong, whether by bad memory or by a fault induced on purpose, and the whole of the protection is not publishing the result.
recovery.sign asks a different question, and the section below says
why. What it shares with the other two is the reason and the argument.
It costs what a verification costs, and in ECDSA a point multiplication
besides — the public key, which BIP340 needs to sign at all and ECDSA
needs for neither of the two things sign does. Measured with the
variants alternated in one process, an Apple M5, macOS 26.6, arm64,
CPython 3.13.14, seven rounds of 20 000 calls with the minimum of each
kept, and a last row running one of them a second time so that the noise
has a figure of its own:
| the call | verify=False |
verify=True |
|---|---|---|
dsa.sign |
12.15 | 31.67 |
ssa.sign |
15.87 | 28.57 |
ssa.Signer.sign |
8.18 | 20.82 |
ssa.sign again (the noise) |
±0.04 |
and recovery.sign in a session of its own, which re-measured dsa.sign
beside it so that the two are comparable rather than merely printed
together — 12.06 against 31.54 for dsa.sign there, agreeing with the
row above, and a noise row of ±0.02:
| the call | verify=False |
verify=True |
|---|---|---|
recovery.sign |
12.02 | 34.41 |
Microseconds per signature. The finding is the gap between the two
increments: 19.5 for ECDSA against 12.7 for BIP340, and the 6.8 between
them is the multiplication secp256k1_ec_pubkey_create does and
secp256k1_keypair_xonly_pub does not — the keypair holds the point
already, which is the same 7.55 the signer
hoists. So the step the specification prescribes is also the cheaper of
the two, and a Signer pays it at the same price as a bare ssa.sign.
verify=False is not the only thing a caller can do about that gap.
dsa.sign takes a pubkey, the key the check verifies under, so that a
caller already holding it does not have the multiplication done again.
That is most of what ECDSA's check costs above BIP340's, and handing the
key in brings the two to the same operation — a bare verification. In a
session of its own, an Apple M5, macOS 26.6, arm64, CPython 3.13.14, nine
rounds of 3 000 calls with the minimum of each kept, and the unchecked
signature run a second time so the noise has a figure of its own — its
dsa.sign rows sitting a few tenths under the two sessions above, which
is between sessions and not within any of them:
dsa.sign |
per call | the check |
|---|---|---|
verify=False |
11.72 | |
| the key derived, as before | 31.92 | 20.20 |
| a compressed key handed in | 26.80 | 15.08 |
| an uncompressed key handed in | 24.78 | 13.06 |
the point already parsed, through _sign_ |
24.52 | 12.80 |
verify=False again (the noise) |
11.76 | ±0.04 |
The 7.40 between the second row and the last is the derivation, which is
secp256k1_ec_pubkey_create through keys._pubkey_from_prvkey_. Timed
alone in a session of the same shape it is 7.31, against a noise of
±0.14. The 7.55 above is a different call — the keypair's own
multiplication — and lands within half a microsecond of it because the
two do the same work.
Within the rows where the key is handed in, 2.02 is what a compressed key costs to parse over an uncompressed one — the field square root that recovers y, which is why the longer encoding is the cheaper argument here — and 0.26 is the uncompressed parse itself, which only the private half avoids. Those are what the parse adds back above the fully parsed row, not slices of the derivation above.
The key is taken on trust: checking it against the private key would
cost the multiplication the argument exists to save. What that would
otherwise confuse is a wrong argument with a wrong computation, since a
key that is not this private key's fails verification exactly as a fault
does, so the failing branch — and only that one — derives the key and
asks again: RuntimeError where the signature does not verify under the
key the private key actually has, ValueError where it does. A key
handed in beside verify=False is refused rather than ignored.
What the trust cannot do is pass a bad signature. The keys a signature verifies under are a property of that signature, so a key fixed before the signature exists is not one of them, and the argument can cost a wrong diagnosis but never a wrong success. It can also catch what the derived check cannot: a private key corrupted before it was signed with agrees with a public key derived from the same corrupted octets, and does not agree with one that came from anywhere else.
ssa.sign takes no such argument, and that is a decision rather than an
omission: its check is a bare verification already, the keypair holding
the point, so there would be nothing to save and one more way for a
check to fail. recovery.sign takes it: its check derived the very same
key before comparing what it recovered against it, and that check is the
dearest of the three. The saving is not larger for that, being the same
call at the same price, and the table below is where both are read. What
taking it cost is a third cause a mismatch can have, which is the
recovery id.
recovery.sign recovers instead of verifying, and the difference is
the recovery id. A verification does not look at it: a recoverable
signature carrying the wrong one verifies perfectly and then recovers a
key that is not the signer's — and recovering a key is the one thing a
caller of that module is going to do with the answer. So the check is
the one the id deserves: recover from the signature, and refuse a key
that is not the one that signed.
That is Bitcoin Core's own distinction, and it makes it in the same
file. CKey::Sign ends in secp256k1_ecdsa_verify; CKey::SignCompact
ends in secp256k1_ecdsa_recover followed by secp256k1_ec_pubkey_cmp
against the key derived from the private one. Both under the same
comment.
It subsumes the verification exactly, rather than probably. Recovery is
not selective: for a given id it answers the key under which that r
and s verify, so an inconsistent pair does not fail — it comes back as
a different key, and fails only where r is not the x of a point at
all. That is the stronger argument rather than a weaker one. Because the
recovered key is by construction the key that verifies the signature,
recovered == signer is a verification, with the id checked besides;
nothing is given up by no longer verifying, and it is provable rather
than argued. What it costs is 22.4 microseconds against ECDSA's 19.5 — a
recovery being about a verification's work, and the comparison and the
derivation making up the rest.
What the three check is not quite the same region either, and
recovery's is the one worth knowing: what its check reads is the id
held inside the secp256k1_ecdsa_recoverable_signature, while the id the
caller receives is the one serialize_compact writes afterwards — so the
recovery id is outside the checked region exactly as a DER encoding is.
Core does the same, CKey::SignCompact recovering from its rsig and
not from the octets it filled. ssa verifies the very 64 octets it
answers with; dsa verifies the signature object and serializes it
afterwards, so the DER or compact encoding is outside what was checked —
as it is in Core, whose CKey::Sign verifies the
secp256k1_ecdsa_signature and serializes after. All three are
defensible, the serializers being memcpy-shaped where the signing is
arithmetic, and the difference is worth a sentence rather than a
change.
The derivation inside it is what a caller can hand in, exactly as
dsa.sign takes it. Measured in one session with dsa.sign beside it so
that the two are comparable rather than merely printed together — an
Apple M5, macOS 26.6, arm64, CPython 3.14.6, nine rounds of 3 000 calls
with the minimum of each kept, and the unchecked signature run a second
time so the noise has a figure of its own:
recovery.sign |
per call | the check |
|---|---|---|
verify=False |
12.07 | |
| the key derived, as before | 35.00 | 22.93 |
| a compressed key handed in | 29.67 | 17.60 |
| an uncompressed key handed in | 27.49 | 15.42 |
the point already parsed, through _sign_ |
27.25 | 15.18 |
verify=False again (the noise) |
12.09 | ±0.02 |
dsa.sign in that same session was 12.14 unchecked, 31.97 with the key
derived and 24.55 with an uncompressed one handed in — a check of 19.83
becoming 12.41 — which puts both of its tables here within a few tenths
of the ones above, between sessions and not within either. The 7.51 the
argument removes is secp256k1_ec_pubkey_create and nothing else: timed
alone in the same session it is 7.53. The 2.18 between the two
serializations is the field square root that recovers y, and the 0.24
under it is the uncompressed parse only the private half avoids. What
stays is what a recovery and a comparison cost over a verification, about
3 microseconds either way it is read — 15.42 against 12.41 with a key
handed in, 22.93 against 19.83 with it derived — and that it is the same
3 both times is what says the argument took the derivation away and left
the rest alone.
The diagnosis costs one comparison more than dsa's, and pays it only
where something is already wrong. A mismatch here has three causes where
dsa's has two — the key given, the recovery id, or the computation —
and the derivation the matching path skipped is what separates the one
that is an argument from the two that are not. Where the recovered key
is the signer's after all, the key handed in is the wrong one, which is a
ValueError; where it is not, the signature does not recover its own
signer, which is what a wrong id and a fault both look like from here.
Neither of those is anything a caller of sign passed — the id comes
back from secp256k1_ecdsa_sign_recoverable beside the signature, so a
wrong one is a fault by the time the check runs — and that is why the two
share the RuntimeError.
Every other microsecond figure in this file was measured before this
argument existed and is therefore the signature without the check:
verify=False is the column they are in.
Grinding for a low r
dsa.sign(grind=True) answers the signature of the same key and message
whose r has its high bit clear. DER spends a leading zero octet on an
integer whose top bit is set, so that signature encodes one octet
shorter — which is what Bitcoin Core's CKey::Sign grinds for, and this
is Core's scheme rather than a rephrasing of it: the first attempt is the
plain RFC6979 signature, and each retry mixes a uint32 counter, little
endian in the first 4 of 32 octets, into the nonce. Written any other
way it would answer octets nobody else answers; written this way,
tests/vectors_test.py holds it to Core's own vectors and to
rust-secp256k1's.
It costs a signature and then some: 24.9 microseconds against the 11.7 of
a plain one, measured beside it over 2000 keys, because half the attempts
are wasted and the tail is longer than the average — 2.09 attempts on the
mean, and the worst of those 2000 keys took 14. That is why it is a
parameter and not the default, and why s is not mentioned in the same
breath: libsecp256k1 has already returned the lower of the two, so there
is nothing there to grind for.
Where the loop is written was measured, not assumed. Four loops answering the same signature, alternated in one process — 2000 keys signed once each, seven rounds, the minimum of each kept — with the compact form of the result, which is what the retry reads, and a last row running the implemented loop a second time so that the noise has a figure of its own:
| the loop | microseconds per signature |
|---|---|
| a caller's own, over the public wrappers, once per attempt | 24.7 |
as implemented, asking is_low_r per attempt |
24.8 |
| the same, keeping one compact buffer per call | 24.6 |
| the same again, with both scratch buffers at module level | 24.5 |
| the implemented loop, run twice (the noise) | ±0.1 |
The finding is the spread: three tenths of a microsecond separate the four, against a noise row of one, and the caller's own loop is not measurably behind the one inside the package. So what crossing this boundary once per signature could save is somewhere inside that spread — and most of what is in it is the per-attempt serialization the predicate costs, not where the buffers live, the two buffer rows being 0.1 apart. A loop compiled in C would have started from the last row, and it would have cost the one thing these bindings do not trade: a dynamic build compiles no C at all, so a C helper would be a feature the static wheels have and the dynamic ones do not. Which leaves grinding here worth having for the scheme and the vectors that judge it, and not for the microseconds.
Holding the buffers at module level is what the last row costs, and it is not available anyway: a package with one shared context and a thread safety story does not get to keep scratch memory where a second thread reaches it.
What the loop tests is is_low_r, which is the compact serialization and
not the DER length: the two are not the same question, DER being
6 + lenR + lenS, so a high r of 33 octets with an s that happens to
need only 31 encodes to 70 octets too — about one signature in 500 — and
a length test would take those for low-r ones. The first octet of the
compact form is the top of r, which is exactly what Core's
SigHasLowR reads. A caller asks the same question of a signature it did
not make with dsa.is_low_r, and it is a question and not a rule: unlike
is_low_s, nothing rejects a high-r signature, which is valid and always
was. What it says is that this one is an octet shorter than it might have
been.
The entropy argument is refused together with it. Grinding writes the
very 32 octets aux_rand32 is, so dsa.sign(msg, key, aux, grind=True)
raises rather than resolving silently in favour of one of them.
recovery.sign has no grind, and the reason is that there is nothing
to shorten: a recoverable signature is 65 fixed octets, so grinding one
would buy the caller two signatures' worth of nothing.
Wrapped modules
All the optional libsecp256k1 modules are compiled in and their
declarations are available through the lib and ffi cffi objects. The
table is mainline's:
| libsecp256k1 module | bindings |
|---|---|
| (core) | dsa, keys, hashes |
ecdh |
ecdh |
recovery |
recovery |
extrakeys |
xonly, used by ssa |
schnorrsig |
ssa |
musig |
musig (BIP327) |
ellswift |
ellswift (BIP324) |
silentpayments |
silentpayments (BIP352) |
keys provides the public key of a private key (pubkey_from_prvkey,
compressed by default, compressed=False for the uncompressed form)
and the scalar and point algebra (tweaking, negation,
combination, arbitrary point multiplication, and the multi-scalar
multiplication of pubkey_tweak_mul_sum) underlying BIP32 key
derivation, plus the lexicographic ordering of public keys (pubkey_cmp,
pubkey_sort) that BIP67 and MuSig2 key aggregation call for; xonly
provides the BIP341 taproot tweaking of x-only public keys and of their
private keys, and the x-only public key itself, from a full public key
(from_pubkey) or straight from a private key (from_prvkey);
hashes provides the BIP340 tagged hash, the domain separation the
taproot tags are built on.
Wherever one of these answers a secret — a tweaked or negated private
key, a shared secret, a nonce — it also takes a keyword-only into: a
writable buffer of exactly 32 contiguous octets, which receives the
secret in place of the bytes the call would otherwise return, so that
the copy the caller is left holding is one they can overwrite. It is an
addition and not a change; omit it and nothing differs. SECURITY.md is
where what it does and does not buy is stated, and names the
silentpayments secrets it does not reach.
Two of those have a second spelling for a caller doing arithmetic rather
than holding a key. keys.pubkey_sum is pubkey_combine with the point
at infinity answered as None instead of refused: P + (-P) is the
identity, which a curve library has a value for and which no
secp256k1_pubkey can hold, so the sum that is no public key is the one
thing the two calls do differently. And xonly.to_pubkey is the lift:
an x-only key is an x, the point it names is the one with even y, and
reading that y is secp256k1_ec_pubkey_parse of 0x02 || x — octets a
caller used to write itself, there being no libsecp256k1 call from an
x-only object back to a point.
Converting between two serializations of the same value is
keys.reserialize for a key and dsa.to_der and dsa.to_compact for a
signature. Two names there and one here, because which serialization a
signature arrived in cannot be read off its octets: a DER signature of 64
of them exists, and begins with the 0x30 a compact r may begin with
too. So the input form is named by the call, as compact names it on
dsa.sign and dsa.verify, where a key's is read from its length.
ssa.sign signs a 32-byte message hash, as bitcoin does; ssa.sign_custom
signs a message of any length, which BIP340 allows and which a protocol
of its own may define.
dsa.nonce_rfc6979 and ssa.nonce_bip340 answer the nonce each signer
derives, which is the one part of signing these bindings used to compute
and never show. libsecp256k1 exports both derivations as callable
pointers, so this is the C function itself rather than a second
implementation of it, called with what the signer passes it -- and what
comes back is the k of the signature the same arguments produce, which
is how tests/nonces_test.py checks it: r is the x of k times the
generator. A python implementation of either derivation has published
vectors and, until now, no oracle. The nonce is the secret a signature is
built on, so reading one into python takes it out of constant-time code:
what these are for is checking a derivation, not driving one.
ecdh.shared_secret returns the SHA256 of the compressed shared point,
the libsecp256k1 default. The hash function is not exposed: libsecp256k1
takes it as a C callback, and a protocol needing another derivation has
the shared point itself as keys.pubkey_tweak_mul(pubkey, prvkey),
constant time like the ECDH call and without python in the middle of it.
silentpayments is BIP352, and the elliptic curve half of it, which is
what libsecp256k1 implements: create_outputs is the sender's side and
takes the private keys of the inputs the payment is funded from,
prevouts_summary and scan_outputs the recipient's, and label and
labeled_spend_pubkey the several addresses one scan key can receive
at. What is not there is what BIP352 states over scripts -- which inputs
of a transaction are eligible, and which of those are taproot -- because
that is a script question and there is no script here: the two kinds of
key are two arguments, and the caller says which is which.
tests/vectors_test.py drives both directions of every BIP352 vector,
and reads that eligibility off the keys the vector file itself publishes
rather than off its scripts, for the same reason.
Some things about it are worth knowing before it is used. The summary
prevouts_summary returns is opaque and not a serialization: what is
inside is libsecp256k1's own, portable across neither platforms nor
versions, and the only thing to do with it is hand it to scan_outputs
in the same process. And the label cache is a mapping the caller owns:
libsecp256k1 recognizes a label by calling back to look it up, so a
labeled output is found only if its label is in the mapping handed in --
which is also why the keys of that mapping are bytes and only bytes,
a bytearray and a memoryview not being hashable.
secp256k1_context_set_sha256_compression, new in libsecp256k1 0.8.0,
has no binding, by the decision that keeps the ECDH hash out: it replaces
the SHA256 compression function the library uses internally, and its
purpose is to route it to a hardware implementation. Reached from python
it would do the opposite -- a python call per 64-byte block, in the
innermost loop of every hash the library computes -- so what it is for is
unreachable through these bindings and what it would be is a way to make
them slow. It remains available through lib for a caller who has a C
function pointer to give it.
MuSig2 is wrapped, in musig. What its two-round protocol needs is a
session whose secret nonce cannot be reused, and that is a property of
an object's lifetime rather than of a function: only whoever owns the
session can invalidate it. This package is otherwise stateless by
construction, every other function being one libsecp256k1 call with its
arguments validated, and musig.KeyAggCache and musig.Session are its
exception -- the Outposts past the boundary section above says why the
existing rule for holding an object does not reach them, and musig.py's
own module docstring records the decision to take the exception rather
than to leave the state to whoever calls this package, KeyAggCache and
Session having no serialization to hand back regardless.
musig.SecretNonce is the object that carries the secret: nonce_gen
and nonce_gen_counter return one, partial_sign wipes it whether it
signs or is refused, and a session abandoned before that -- the case
libsecp256k1 itself cannot see -- is wipe, or the with statement that
calls it on the way out. ssa.Signer is the model this follows, and
SECURITY.md records both as the buffers in this package whose zeroing is
asked for rather than done.
A PSBT's multi-party signing state is not what musig.Session is:
that object is scoped to one process and one two-round exchange -- it
has no serialization, the module docstring above giving the reason
that is taken as an exception here -- so whoever needs PSBT-level
coordination holds that state elsewhere, outside this package.
The aggregate signature Session.partial_sig_agg answers is a plain
BIP340 signature, over the aggregate key KeyAggCache.pubkey_get or
agg_pubkey names: ssa.verify is what checks it, and nothing in
musig duplicates that call. keys.pubkey_sort is BIP327's key
ordering, applied before KeyAggCache if the signers have not agreed on
another one.
A call made through lib directly -- which musig's own functions are,
underneath, and which a caller reaching past them is free to make too --
has no argument validation in front of it, so libsecp256k1 is the only
thing checking its preconditions: it reports a violated one through a
callback of the context and returns 0, leaving nothing in the return
value to say what happened. context.check() raises what was reported,
the failed precondition verbatim, and is meant to follow such a call:
if not lib.secp256k1_musig_partial_sign(ctx, psig, secnonce, ...):
context.check() # ValueError, naming the failed precondition
That example is the one that matters: partial signing zeroes the secret
nonce, so signing twice with it is refused, and this is how a caller
reaching lib directly learns why -- musig.SecretNonce.partial_sign
answers its own ValueError for the same case instead, its callers
having no callback to read. The entry points taking octets need none of
it, validating their arguments before calling; the private halves taking
an object need exactly it, for the reason Parsing the key once gives.
Either way the abort()ing libsecp256k1 defaults are replaced by
do-nothing stubs in the vendored build, so no illegal argument can take
the hosting process down.
btclib_secp256k1.zkp is the same layout over secp256k1-zkp: a lib
and an ffi of its own, a zkp.context holding that library's own
shared context and raising what it reported, and a wrapper module per
secp256k1-zkp module wrapped. Which those are is
the API documentation rather
than a list here, that set growing a module at a time.
silentpayments runs the other way: secp256k1-zkp's own copy of that
module is mainline's, blob for blob at the commits Versioning
names, so the flagged extension declares none of it and BIP352 is
reached through btclib_secp256k1.silentpayments alone.
Thread safety
The bindings can be called concurrently from several threads. They hold
a single libsecp256k1 context, created and randomized at import time and
passed to every call: secp256k1_context_randomize is what mutates a
context, it runs once before any thread exists, and each call allocates
the buffers it writes to.
This matters on a free-threaded interpreter, for which a wheel is built
(cp314t), where those calls are no longer serialized;
tests/concurrency_test.py exercises it.
btclib_secp256k1.zkp.context holds a second, separate context, one
library over, and does not build it the same way: the guarantee above
rests on the shared context above being built at plain module scope,
which Python's own import lock serializes for every thread that reaches
it; zkp's is deferred to the first call instead, by decision (#607
onward), so that importing the subpackage never reaches for the flagged
extension on its own. context._lock is what makes that deferred build
safe under several threads (#717): held for the whole of it, so two
threads racing the first call still build one context between them
rather than one each, freeing the other's callback closures out from
under it.
The outposts above are what hold a buffer across calls, and they answer
differently. ssa.Signer does not cost that guarantee: libsecp256k1
takes a keypair const, so several threads may sign through one signer.
What is theirs to order is the wipe, which overwrites the very memory a
concurrent signature is reading — the same shape of race as
re-randomizing the context below, and the reason the with block ends
where the threads have joined. musig.Session reads the same way: every
call that takes one — SecretNonce.partial_sign, partial_sig_verify,
partial_sig_agg — takes it const, secp256k1_musig_session never
being written to after Session.__init__ builds it, so several threads
may verify or sign through one session at once.
keys.PubkeyTweakChain is the exception, and by construction:
secp256k1_ec_pubkey_tweak_add takes its key as in and out, so every
tweak_add writes the point the chain holds. One chain belongs to one
thread, and a path is a sequence in any case — two threads sharing one
are not two walkers of it but two writers of the same point. Each thread
that wants one builds its own, which costs the parse the chain exists to
pay once. musig.KeyAggCache is the same shape: pubkey_ec_tweak_add
and pubkey_xonly_tweak_add write the cache in place, so two threads
tweaking one race, where two threads only ever reading it — through
nonce_gen, Session.__init__, partial_sign — do not, none of those
calls writing to it.
musig.SecretNonce is neither of the two shapes above, being narrower
than both: it is meant to be read exactly once, from whichever thread
gets there first, and refused everywhere else — a keypair's
read-any-number-of-times constness does not apply, and neither does a
chain's one-object-one-thread convention, since a shared secret nonce
is exactly the case this class has to make safe rather than ask a
caller to avoid. Reading self._secnonce and then clearing it are two
statements, and without ordering them two threads calling
partial_sign on the same object could each pass the read before
either reaches the clear, and both go on to drive
secp256k1_musig_partial_sign over the same native secnonce at once —
an unsynchronized concurrent access on the exact memory a MuSig2
nonce-reuse leak comes from, the worst failure this module has. A lock
private to the instance is what orders it: SecretNonce._take makes
the read and the clear one atomic step, so at most one caller — from
any thread — ever receives the object. tests/concurrency_test.py
races WORKERS threads on one SecretNonce and asserts exactly one
signs.
The one way to lose that guarantee is to re-randomize the shared context
while it is in use. context._randomize(context.ctx) is there for a
caller who wants fresh blinding, and libsecp256k1 asks for exclusive
access to a context to mutate one: call it before the threads start, or
hold a read-write lock over every call that takes ctx.
What context.check() reports is per thread: the callback recording it
runs on the thread of the call that triggered it, which is what
attributes a message to the right caller.
What is not protected is the secret material itself, which lives in Python objects for as long as the interpreter keeps them: see SECURITY.md.
The vendored library is not optional
Linking against a libsecp256k1 already installed on the system, instead of the vendored one, is what a distribution packager needs: Debian, Fedora, conda-forge, Nix and Alpine have policies against vendored copies of a cryptographic library. This package does not offer that mode, by decision, and the account of it belongs here rather than in a closed issue.
In favour of it:
- it is the only way to reach the users of apt, dnf and conda, who do not install from PyPI at all; the coincurve fork libsecp256k1-py-bindings exists to fill exactly that gap for a conda-forge recipe
- a libsecp256k1 vulnerability would then be fixed once for the whole system, instead of once per wheel of every package vendoring it
- it would cost little to add: the build is a single CMake path, so there is exactly one method to bypass, and pkg-config already knows where an installed library and its headers are
Against it:
- the versioning contract above breaks, and nothing can detect that it
has: libsecp256k1 has no runtime version function, and no version macro
in its headers either, so
__version__would go on claiming the version it wraps over a library of any vintage. The only machine-readable version is the pkg-config field, read at build time and gone afterwards - the module set stops being an assertion: headers are installed per
module, so what is there can be detected, but a distribution ships an
older library, without
musigorellswift, andrecoveryis off by default upstream. Every binding module would need a capability check, and the table above a column of conditions - the abort() semantics would differ between the two builds: the shared
context sets its own callbacks, so the bindings stay safe either way,
but a system library is built with the abort()ing defaults, so a
context created through
libcould take the process down, which is whattests/core_test.pyasserts cannot happen - the test suite would become conditional on the library it finds, where the ratchet is measured on the two linkages this tree builds from the vendored source and on nothing whose vintage it does not know
- it is a second build path, which unifying on CMake removed, and a support surface: reports about a libsecp256k1 this project did not build, possibly patched downstream, in consensus critical code
It stays out until a packager asks for it. The value is in opening a channel, and the costs above are paid from the first day, whether anyone walks it or not.
Build
The vendored libsecp256k1 is built with CMake on every platform, out of
tree: the submodule is only ever read from. CMake is declared as a build
requirement, so a PEP 517 frontend provisions it and only a C toolchain
has to be there already; a system CMake 3.22 or newer serves just as
well, with --no-build-isolation.
The cffi extension itself is compiled with the interpreter's own
toolchain, which on Windows is the standard setuptools/MSVC one; a gcc
in the PATH is still required there, as it preprocesses the library
headers for cffi. Both Windows architectures are built this way: the
vendored library is built for the architecture of the interpreter, which
is what its toolchain compiles the extension for, and not for the one of
the host, which is what CMake would otherwise pick. The two differ
whenever the interpreter is emulated, and on Windows arm64 that is the
default case rather than an exotic one; the same holds for a universal2
interpreter on macOS, which needs both architectures in the archive it
links. The win_arm64 wheels start at CPython 3.11, the first version
with a Windows arm64 build.
The dynamic (ABI mode) Windows wheel is instead cross-compiled on Linux
with mingw-w64, through the vendored CMake toolchain file, and is
x86_64 only.
BTCLIB_LIBSECP256K1_ZKP=true builds a second static extension, over
the vendored secp256k1-zkp, beside the one every wheel carries: it is
what btclib_secp256k1.zkp loads, and no published wheel carries it.
scripts/README.md
has that variable beside the ones choosing among the paths above, and
says what BTCLIB_LIBSECP256K1_ZKP=true alongside one of them does:
the build declines, this extension having no dynamic form.
How to get the submodule, set up the development environment, run the suite, reproduce each CI job locally, and what a change is expected to satisfy are in CONTRIBUTING.md; what a pull request is answered against is in REVIEWING.md.
Release process
Releases are published to PyPI by the release GitHub workflow using
Trusted Publishing:
no long-lived PyPI token exists anywhere; PyPI trusts the workflow
itself (via GitHub OIDC) and hands out a short-lived upload token at
run time. Wheels and sdist are uploaded with PEP 740 attestations, so
their provenance can be verified on PyPI; the sdist attached to the
GitHub release is signed a second time, so that copy can be verified
without the index.
The steps to cut a release, to rehearse one on TestPyPI, and the one-time setup each index needs are in RELEASING.md.
Comparison
Wrappers of the same C library cannot honestly differ in what it
computes, nor in how fast — the point Design makes above about where the
actual work goes, coincurve, secp256k1-py and electrum-ecc
included, every one of them the same libsecp256k1 underneath. That does
not make the difference unmeasurable, only certain about what it is a
difference in: not the cryptography, which is upstream's regardless of
which wrapper calls it, but the boundary each one places around the same
calls — how much a caller pays to cross it. Measuring that honestly, and
publishing the run rather than a claim, is what
btclib-benchmarks is
for, and
the libsecp256k1 wrappers table
is where this project's own boundary is timed against the others', one
run kept whole rather than reduced to a single figure — an order of
magnitude to read there, never a number to quote here.
The btclib organization and its projects are actively supported by DGI and CheckSig.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file btclib_secp256k1-0.8.0.6.tar.gz.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6.tar.gz
- Upload date:
- Size: 6.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c1e13988083540967646230f35c77be2ff5d66fd30c75ebf7b706c3ed708366
|
|
| MD5 |
34535d809c855cb19f9ccbef197371e2
|
|
| BLAKE2b-256 |
1ad36eede957efd2943e663d49388ee6518a622115846dd4e9f6c618edb98042
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6.tar.gz:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6.tar.gz -
Subject digest:
2c1e13988083540967646230f35c77be2ff5d66fd30c75ebf7b706c3ed708366 - Sigstore transparency entry: 2773661757
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-py3-none-win_amd64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-py3-none-win_amd64.whl
- Upload date:
- Size: 1.4 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
430ba7a8b4e946d4634b24da9b11b10ccdcf45f2bc4c02d2d6afcad471c37adc
|
|
| MD5 |
5b08f712bac39b6f5bceebc9ccac6d8d
|
|
| BLAKE2b-256 |
4ae1039fa3469890f5fec2e793789627097ec3563f982aadf2a13eb4387dc3ce
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-py3-none-win_amd64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-py3-none-win_amd64.whl -
Subject digest:
430ba7a8b4e946d4634b24da9b11b10ccdcf45f2bc4c02d2d6afcad471c37adc - Sigstore transparency entry: 2773662534
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad8060f1e35cf0e0ad544eae724c92c6d265b0791e8518611c6f7bd6310bfb75
|
|
| MD5 |
ee5d51d78220576e80b238a21cb0c628
|
|
| BLAKE2b-256 |
166226ec0fb1dba898642e031d2651ee59a8a35c61338b46e13819da915f8493
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl -
Subject digest:
ad8060f1e35cf0e0ad544eae724c92c6d265b0791e8518611c6f7bd6310bfb75 - Sigstore transparency entry: 2773663280
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
- Upload date:
- Size: 1.4 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4abf18e31b1aab71831bfa8dd6823ed8d66e2d7e56bb2c99291a4047e86c4b8f
|
|
| MD5 |
505378a9f23f3943bcb00a3b2bb3bc84
|
|
| BLAKE2b-256 |
972e0ecc0f6a2d4287ab766239ac4d095dfaada56129bf90420f6887a0798264
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl -
Subject digest:
4abf18e31b1aab71831bfa8dd6823ed8d66e2d7e56bb2c99291a4047e86c4b8f - Sigstore transparency entry: 2773665457
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-py3-none-macosx_11_0_universal2.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-py3-none-macosx_11_0_universal2.whl
- Upload date:
- Size: 2.7 MB
- Tags: Python 3, macOS 11.0+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
139ffda2a3bad5a355adc29560c4c3f16d7fbcb7d78f900c35e5aff393d0d36c
|
|
| MD5 |
df854b12f2440164b9decbab56058ab4
|
|
| BLAKE2b-256 |
f89c475b1690afec96f3135c2be34f505b9ed0c50e11bdf3a93ddc609b0c4981
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-py3-none-macosx_11_0_universal2.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-py3-none-macosx_11_0_universal2.whl -
Subject digest:
139ffda2a3bad5a355adc29560c4c3f16d7fbcb7d78f900c35e5aff393d0d36c - Sigstore transparency entry: 2773663721
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-py3-none-macosx_10_13_universal2.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-py3-none-macosx_10_13_universal2.whl
- Upload date:
- Size: 2.7 MB
- Tags: Python 3, macOS 10.13+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
51dc8666eed41e1d0ada6c7a92fb39d71c05d3032f4d9674abde52f658bb9ea4
|
|
| MD5 |
d9fc0f9e54294c0354e32e3ea7309e59
|
|
| BLAKE2b-256 |
6f12e7217cff9d288180f7583b09a72d3912110cc7091030b082c8e6b0fe9a29
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-py3-none-macosx_10_13_universal2.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-py3-none-macosx_10_13_universal2.whl -
Subject digest:
51dc8666eed41e1d0ada6c7a92fb39d71c05d3032f4d9674abde52f658bb9ea4 - Sigstore transparency entry: 2773666041
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: PyPy, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71ffdba41cf60f193da6fe9868b9d6e6a3deb46b93ad9ec21d50d122b2013ae3
|
|
| MD5 |
821dd6e5ca7d6988c508d70904726794
|
|
| BLAKE2b-256 |
1ef293274e48ebe7e2a6b16f7fb2496f608e6b862c4a83af098202db8ae9e420
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
71ffdba41cf60f193da6fe9868b9d6e6a3deb46b93ad9ec21d50d122b2013ae3 - Sigstore transparency entry: 2773662615
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.4 MB
- Tags: PyPy, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6aafe61939abd401ce37ca2833364d8b39e67196396dd69207cbac09b27b9a6d
|
|
| MD5 |
87e7423ce6b5ddf20b4f487516286cb3
|
|
| BLAKE2b-256 |
172d0ab7049569d6d7421b882944f3d9ad006dde0ef87949dc85a92d458c4b7d
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
6aafe61939abd401ce37ca2833364d8b39e67196396dd69207cbac09b27b9a6d - Sigstore transparency entry: 2773666240
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: PyPy, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e5e7d0ee94b8e041c213807664275e1e2a6dfdd0e29aadd5c03a44651c343e7
|
|
| MD5 |
bb4335f39c64959161b84d4a0cc09d81
|
|
| BLAKE2b-256 |
fe96964bcc67ec4e59290b6b0e77942bdda9a441c17633e604fb7aed810b0dd5
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl -
Subject digest:
2e5e7d0ee94b8e041c213807664275e1e2a6dfdd0e29aadd5c03a44651c343e7 - Sigstore transparency entry: 2773665092
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl
- Upload date:
- Size: 1.5 MB
- Tags: PyPy, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50b8372375a6d9a45af8799bbdd8690c3ab759b586a0f839e190f9af400ce3ea
|
|
| MD5 |
cf3ae3a011a03cb0a1229b114787b70e
|
|
| BLAKE2b-256 |
b7b6f22cd9ffa6c943a4ba4129e11e13e1e1bdb7c77dfb930e5fabb286d7af5c
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl -
Subject digest:
50b8372375a6d9a45af8799bbdd8690c3ab759b586a0f839e190f9af400ce3ea - Sigstore transparency entry: 2773662434
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315t-win_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315t-win_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.15t, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1a31a33e5b8ea62a94f792393bef99d9761e4dfe62e4eff3b3e4969daa3bac6
|
|
| MD5 |
2f0a089e45ce06dab577b171c22c3219
|
|
| BLAKE2b-256 |
f989849a202b38070a9fdd69c658efe31eda5f302ae7d3afc1f026ddde167fee
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315t-win_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315t-win_arm64.whl -
Subject digest:
a1a31a33e5b8ea62a94f792393bef99d9761e4dfe62e4eff3b3e4969daa3bac6 - Sigstore transparency entry: 2773667826
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315t-win_amd64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315t-win_amd64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.15t, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ebd15717b29e11797583cf0a142885edd3a4cc2c8d5f2b6b93ed59a61a69a3f6
|
|
| MD5 |
79dcc4b13a3296112dea1e8a2d9e15be
|
|
| BLAKE2b-256 |
08ef49a426d0b6d7662656682c861721251eb9f7e9f037af40a426ce1f952295
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315t-win_amd64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315t-win_amd64.whl -
Subject digest:
ebd15717b29e11797583cf0a142885edd3a4cc2c8d5f2b6b93ed59a61a69a3f6 - Sigstore transparency entry: 2773663413
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315t-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315t-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.15t, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da10cbd22ba4925e3ba981fad2021073d3775e8195d7b8f626ca3af73a7b2e7b
|
|
| MD5 |
4a6f2dd2883eb90273d9baedcddbc53f
|
|
| BLAKE2b-256 |
f45ed4216588e9a558a41628611a90f2f678d40b6461b7febe0224b2097ead3c
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315t-musllinux_1_2_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315t-musllinux_1_2_x86_64.whl -
Subject digest:
da10cbd22ba4925e3ba981fad2021073d3775e8195d7b8f626ca3af73a7b2e7b - Sigstore transparency entry: 2773662310
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315t-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315t-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.15t, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbbee9d16beaf38c296ee9c330d7066401b823bf45875aa8fed55ca7d7d53ff8
|
|
| MD5 |
558c845dcb450abd4d1188513129ded1
|
|
| BLAKE2b-256 |
aff0aa6b98bb153dd9a70124b7aaefeee5c22fa31abb6995db1bae11249736a7
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315t-musllinux_1_2_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315t-musllinux_1_2_aarch64.whl -
Subject digest:
bbbee9d16beaf38c296ee9c330d7066401b823bf45875aa8fed55ca7d7d53ff8 - Sigstore transparency entry: 2773663856
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.15t, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3cfbcf6bc0cc6d5887caa4d7fe6e1ddea10dd0d753f9dab23ae2db01995336ff
|
|
| MD5 |
3ec1c00d20ce573f629bb4cd461d9da8
|
|
| BLAKE2b-256 |
802ed9a98e0f3fce9a97588fd6d209df994a2cfb02199a6593d2cb7f05343503
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
3cfbcf6bc0cc6d5887caa4d7fe6e1ddea10dd0d753f9dab23ae2db01995336ff - Sigstore transparency entry: 2773664450
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.15t, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b173ffec3644c5e7b002b2c762061999504c1e1139fd582ea7ec7b10678e442
|
|
| MD5 |
395fc30faf289293b6eed48c806445b8
|
|
| BLAKE2b-256 |
ce8b99e60a0195e6211322927c98fc8694ce02240f0231e9d9f3b27bf06b4e58
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
0b173ffec3644c5e7b002b2c762061999504c1e1139fd582ea7ec7b10678e442 - Sigstore transparency entry: 2773667729
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315t-macosx_11_0_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315t-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.15t, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f46fd177675b8387bacda61787d84dda70b0988c2fb383f9eb28ff1160da4100
|
|
| MD5 |
a0e46500bc58c979360833b124bec2c0
|
|
| BLAKE2b-256 |
6269b6f1038119b64f6ecc2d7eb3b2735ce1e042c40b0b55860bc2b2f7657f6d
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315t-macosx_11_0_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315t-macosx_11_0_arm64.whl -
Subject digest:
f46fd177675b8387bacda61787d84dda70b0988c2fb383f9eb28ff1160da4100 - Sigstore transparency entry: 2773664611
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315t-macosx_10_15_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315t-macosx_10_15_x86_64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.15t, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
117e31d5e6bb99da3b8add7905f8d8a18b6185eae60358ac0fb57748c89660b2
|
|
| MD5 |
3c3715323672b782b744938ae1accc2c
|
|
| BLAKE2b-256 |
8f7b97d44e174a85d2bef931cb765d196a5dbb378718dfa479a0d7d8ede1d275
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315t-macosx_10_15_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315t-macosx_10_15_x86_64.whl -
Subject digest:
117e31d5e6bb99da3b8add7905f8d8a18b6185eae60358ac0fb57748c89660b2 - Sigstore transparency entry: 2773667906
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315-win_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315-win_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.15, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de20f22265f431409c91317e7598fc161dff7f0e87dde7f9fb2b3d866ca1ef3e
|
|
| MD5 |
217e431cca728de8845dbe0e1062eaed
|
|
| BLAKE2b-256 |
dc37ffb2b3d8494b0218e68250581d28431ce6d96495964c0bd29640907a826b
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315-win_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315-win_arm64.whl -
Subject digest:
de20f22265f431409c91317e7598fc161dff7f0e87dde7f9fb2b3d866ca1ef3e - Sigstore transparency entry: 2773665696
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315-win_amd64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315-win_amd64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.15, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4554d3bc59e7499bc7e617a6c9d46a97a3f3a03155fe6a699036272779dd2b08
|
|
| MD5 |
88c69a0965b13da29ad091f96de57d4a
|
|
| BLAKE2b-256 |
6171d276d8b73e72089eddc3bfead249e7b6badf1fc659ffe9eb4f67f482c2f6
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315-win_amd64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315-win_amd64.whl -
Subject digest:
4554d3bc59e7499bc7e617a6c9d46a97a3f3a03155fe6a699036272779dd2b08 - Sigstore transparency entry: 2773667218
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.15, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb797e1432c887a5e7fdf5dd199fa7a4e6ad6925422d214f74ddb14cecd0a490
|
|
| MD5 |
7922d14ca533ceec40fa41cce22e0c32
|
|
| BLAKE2b-256 |
0b9eb58b2e94a306291fff90f6cb66273fcbd83fea3a36c0533c628b4d767d06
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315-musllinux_1_2_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315-musllinux_1_2_x86_64.whl -
Subject digest:
eb797e1432c887a5e7fdf5dd199fa7a4e6ad6925422d214f74ddb14cecd0a490 - Sigstore transparency entry: 2773665866
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.15, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc09932dcc783ccf412923603ba04d36014e478c8fdef50f30fb7fced5c4f482
|
|
| MD5 |
c602ea725ae36b559d16a39cee4f070e
|
|
| BLAKE2b-256 |
ddf37344fbf708179314cf91635a46669f5f5d92f371622fb8dc6064b4f43ec7
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315-musllinux_1_2_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315-musllinux_1_2_aarch64.whl -
Subject digest:
fc09932dcc783ccf412923603ba04d36014e478c8fdef50f30fb7fced5c4f482 - Sigstore transparency entry: 2773664242
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.15, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b717e3326515d16934472f9d80ca34eebd0a3707790cd704ad4a0ec7d984a1cd
|
|
| MD5 |
39aff560bc8a55f52e1ed09e6ae929a3
|
|
| BLAKE2b-256 |
dc68d92bf07df6bc3211207ab93a26366fcd72f5878b99fc0b69c47b8393d561
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
b717e3326515d16934472f9d80ca34eebd0a3707790cd704ad4a0ec7d984a1cd - Sigstore transparency entry: 2773663530
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.15, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
819ff120dc3b447bd2869559a97270132d28231904a8c1ab8c53faa4b84f587e
|
|
| MD5 |
4327bf86582edebfe126971a5e8d53b0
|
|
| BLAKE2b-256 |
fdccc6dd842a9fc3fd1c719139c03bcef24baf86d503e3b86f6db6b8b0686db4
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
819ff120dc3b447bd2869559a97270132d28231904a8c1ab8c53faa4b84f587e - Sigstore transparency entry: 2773663188
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315-macosx_11_0_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.15, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a202cefcd3416def08f6f8b505e86093fffc7e520b305dfabca438b51eb7176
|
|
| MD5 |
e0877c5d6f7ae65e26004a613b950f52
|
|
| BLAKE2b-256 |
9d611360694cc4fc0b50298034845a52deb2e8a9ea534a5a6f707ef1ebfb6ed0
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315-macosx_11_0_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315-macosx_11_0_arm64.whl -
Subject digest:
4a202cefcd3416def08f6f8b505e86093fffc7e520b305dfabca438b51eb7176 - Sigstore transparency entry: 2773666487
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp315-cp315-macosx_10_15_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp315-cp315-macosx_10_15_x86_64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.15, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
24c3a47b1bb680e79b82f3ef05a4c7eb717ba598dc5fdd561ec3f7bee6c0d1db
|
|
| MD5 |
bfe53206858a366e8d1224b8b0f5cf6e
|
|
| BLAKE2b-256 |
edb2c994be736d188e6e98deb076737ccc02fdfa5ccd75002a8ca19e913f2607
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp315-cp315-macosx_10_15_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp315-cp315-macosx_10_15_x86_64.whl -
Subject digest:
24c3a47b1bb680e79b82f3ef05a4c7eb717ba598dc5fdd561ec3f7bee6c0d1db - Sigstore transparency entry: 2773667656
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314t-win_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314t-win_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.14t, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c17c2d35dbc29211ea6fe7d570ac6fff2c420f08d09f31c3f9e61d153deaf2f
|
|
| MD5 |
be3341d05449c2dff72f996b32234608
|
|
| BLAKE2b-256 |
f7c89c667f1350962403c6e5990702f212a5074b11ca26d0efdb462834e88379
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314t-win_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314t-win_arm64.whl -
Subject digest:
6c17c2d35dbc29211ea6fe7d570ac6fff2c420f08d09f31c3f9e61d153deaf2f - Sigstore transparency entry: 2773662397
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314t-win_amd64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314t-win_amd64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.14t, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad2712532aabe6d06c4dae43d523f8dbff0b06c07251fe3b23f7d1cba82dd210
|
|
| MD5 |
3a1b5b492e7be0809926960f3174bc1c
|
|
| BLAKE2b-256 |
6f6389fea320a8eb601978b0ac4c5d15f7396e3d6cfe76194c5b42d852d385c1
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314t-win_amd64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314t-win_amd64.whl -
Subject digest:
ad2712532aabe6d06c4dae43d523f8dbff0b06c07251fe3b23f7d1cba82dd210 - Sigstore transparency entry: 2773667568
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314t-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314t-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.14t, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
752b08e4cbdaf4f9ca24d405c42ad74e8de31744aa961abd49c3793fe38d1983
|
|
| MD5 |
5364acd713260532229d13107927aad2
|
|
| BLAKE2b-256 |
62aafaefeb361e6334da3120b577dc23753af74d7fb80cf56217f03ff8fb94ad
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314t-musllinux_1_2_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314t-musllinux_1_2_x86_64.whl -
Subject digest:
752b08e4cbdaf4f9ca24d405c42ad74e8de31744aa961abd49c3793fe38d1983 - Sigstore transparency entry: 2773664364
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314t-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314t-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.14t, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b548f3c6f007c3e2b4c2fed3b6cc476f5241708c5c41e041279870b88e836be7
|
|
| MD5 |
40378bf7dd005aba3db12b93b80cf2dd
|
|
| BLAKE2b-256 |
d0f2d0ba82c9f31322adacd157f501df2a5d98b66bd979416f862c21fc7c1d0b
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314t-musllinux_1_2_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314t-musllinux_1_2_aarch64.whl -
Subject digest:
b548f3c6f007c3e2b4c2fed3b6cc476f5241708c5c41e041279870b88e836be7 - Sigstore transparency entry: 2773665001
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.14t, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
34acd2ae02534700f8c1f67b29bddbff2ba91438cb7372ea08e0dfa6ae8276f3
|
|
| MD5 |
c048155189bdb31a767c88413e4333c4
|
|
| BLAKE2b-256 |
06fbda687f7757e5f261273956b7aa4167c40eb4ee695ff3236f83cfa3f82523
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
34acd2ae02534700f8c1f67b29bddbff2ba91438cb7372ea08e0dfa6ae8276f3 - Sigstore transparency entry: 2773664777
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.14t, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4fb04de3b44babc91d6332c7b9de52608bcd813ea0baa6975f555c22cc3bc784
|
|
| MD5 |
4b70a986443224d18d484cda739c2dd5
|
|
| BLAKE2b-256 |
a076c3210066ebb5b263c65d111e14dcb914c1d6949182ae8628c2bef8abb15b
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
4fb04de3b44babc91d6332c7b9de52608bcd813ea0baa6975f555c22cc3bc784 - Sigstore transparency entry: 2773663771
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314t-macosx_11_0_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314t-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.14t, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f953e814db421fb2a5e2c04f0d4dcfbbe389b6b5aa9f948575f62df7aaf1578e
|
|
| MD5 |
235386aebdcfc979424b4d7a7110cb75
|
|
| BLAKE2b-256 |
5badfaa7584d1cf2d6660ac5d2460994b8790161bcd46f272c28739875069634
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314t-macosx_11_0_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314t-macosx_11_0_arm64.whl -
Subject digest:
f953e814db421fb2a5e2c04f0d4dcfbbe389b6b5aa9f948575f62df7aaf1578e - Sigstore transparency entry: 2773666935
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314t-macosx_10_15_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314t-macosx_10_15_x86_64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.14t, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f81fedab98b6b6bae50d881a5843f47d5903c2a48a6a51142827008f2bc3436
|
|
| MD5 |
afd8efe76e4e374030f3c930aa93ce91
|
|
| BLAKE2b-256 |
07e5df5da0544ed8ada71e3da9f6ea8602ab1d7bbf0f6cabfb7833e5c0a92ecf
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314t-macosx_10_15_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314t-macosx_10_15_x86_64.whl -
Subject digest:
8f81fedab98b6b6bae50d881a5843f47d5903c2a48a6a51142827008f2bc3436 - Sigstore transparency entry: 2773664019
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314-win_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314-win_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.14, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c4e691d311e25b57888eceab0381a54c45426ba2f63643a75f00289950871179
|
|
| MD5 |
5f346cb84b965078099caf5f70166097
|
|
| BLAKE2b-256 |
faf30aa9332c631a84d262c76eb887f3ac23a8c287f92c256a804800f49eacde
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314-win_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314-win_arm64.whl -
Subject digest:
c4e691d311e25b57888eceab0381a54c45426ba2f63643a75f00289950871179 - Sigstore transparency entry: 2773662580
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bd37c2b738fb46c85330f68b458c104147361ae4e47759e450fbf3babdd5e148
|
|
| MD5 |
efeaea85dbb993e791dc334cd927bc02
|
|
| BLAKE2b-256 |
b39817bfa0ad1b4a45572ee58124cb428d07cf373be597cd55935a610e1742b6
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314-win_amd64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314-win_amd64.whl -
Subject digest:
bd37c2b738fb46c85330f68b458c104147361ae4e47759e450fbf3babdd5e148 - Sigstore transparency entry: 2773662484
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.14, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f1ad3b695efe39a6d105d1ebf743d0dcd6a7a1571ea2862392f9a8b28b1d8ad4
|
|
| MD5 |
9572ea676cbefe8ece9acf31d3cf2104
|
|
| BLAKE2b-256 |
04fc244bae8536b8bff665c2c2175d81fc024ccb2b09e3211650207eba535f40
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314-musllinux_1_2_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314-musllinux_1_2_x86_64.whl -
Subject digest:
f1ad3b695efe39a6d105d1ebf743d0dcd6a7a1571ea2862392f9a8b28b1d8ad4 - Sigstore transparency entry: 2773664883
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.14, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9b5b23deb514ff9074866f4b1e1a18ec0fcb2ac409c091feec1a23d4bb4ac9e
|
|
| MD5 |
f845592386bb7f1721537763fbc183d8
|
|
| BLAKE2b-256 |
af4186a642ef199ade486fae143182497199ad3b9af814e6e3c74ca3fb449721
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314-musllinux_1_2_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314-musllinux_1_2_aarch64.whl -
Subject digest:
c9b5b23deb514ff9074866f4b1e1a18ec0fcb2ac409c091feec1a23d4bb4ac9e - Sigstore transparency entry: 2773663584
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.14, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
910c34885cf5d658cdcec97c136e1a9705c13ee68d1ba3e064d1b6f39410cca7
|
|
| MD5 |
f6d28114aafa5f4b82a6aba93f1ee95c
|
|
| BLAKE2b-256 |
558dcb1cfd125f07ef35a53c9c3f7171772d46b3b29e93c426a9af0d89b4c6fc
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
910c34885cf5d658cdcec97c136e1a9705c13ee68d1ba3e064d1b6f39410cca7 - Sigstore transparency entry: 2773661814
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.14, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64b68046ae9955e163c4c81c42bd456cea8629f845262221f09ea4173ab6894c
|
|
| MD5 |
79c251e4b5932a841b4fa0362bc35592
|
|
| BLAKE2b-256 |
7f3a73170796d43b4e693bd41badf58c6e372ad2475a8722a95d7d204effca4b
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
64b68046ae9955e163c4c81c42bd456cea8629f845262221f09ea4173ab6894c - Sigstore transparency entry: 2773662683
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.14, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
231f9246a42a585f4ef85b968d18c08aa08256a1632aefeac20ccb307adedcc8
|
|
| MD5 |
430571b23ff9f65e6436a2625ef6be30
|
|
| BLAKE2b-256 |
2e01d0d426d4efbc10a310e4b47158e51d6d7e1b07366947bbe6b20ec5a6276d
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314-macosx_11_0_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314-macosx_11_0_arm64.whl -
Subject digest:
231f9246a42a585f4ef85b968d18c08aa08256a1632aefeac20ccb307adedcc8 - Sigstore transparency entry: 2773662135
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp314-cp314-macosx_10_15_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp314-cp314-macosx_10_15_x86_64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.14, macOS 10.15+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a67811904233c94533a0f48b3b8b0d7ca573b04a67e8043e6618253a567efa2
|
|
| MD5 |
9d25b13aeb8c080dd37fd2bae0264611
|
|
| BLAKE2b-256 |
33ed7b644deff50ffe3fbe557e3373fbc4cc48447b531ebeab51ba74fb93cfd5
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp314-cp314-macosx_10_15_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp314-cp314-macosx_10_15_x86_64.whl -
Subject digest:
3a67811904233c94533a0f48b3b8b0d7ca573b04a67e8043e6618253a567efa2 - Sigstore transparency entry: 2773662185
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp313-cp313-win_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp313-cp313-win_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.13, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1347b72b7de37776864009702bfa0bdffd4fdf4d4aaa815193b96f2eeedd14e
|
|
| MD5 |
85fe59463904ba00e303b4c590a97e5a
|
|
| BLAKE2b-256 |
a13026c6e63c76b2e1d62d700ba61ff722a7ccdeb6dcff51319932b2afe4fe5b
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp313-cp313-win_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp313-cp313-win_arm64.whl -
Subject digest:
c1347b72b7de37776864009702bfa0bdffd4fdf4d4aaa815193b96f2eeedd14e - Sigstore transparency entry: 2773664113
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01f2b25e5faf0b28f27cb96d0b9bf8cb44309233c7e09040eccf04053296a1e7
|
|
| MD5 |
74297f73399757b9cef889b1fa3d2bb9
|
|
| BLAKE2b-256 |
55ff7d10caf521550ffdeb4f1c62a1bfafea1a3fdef97949831a384cea77b263
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp313-cp313-win_amd64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp313-cp313-win_amd64.whl -
Subject digest:
01f2b25e5faf0b28f27cb96d0b9bf8cb44309233c7e09040eccf04053296a1e7 - Sigstore transparency entry: 2773661984
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp313-cp313-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp313-cp313-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.13, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
484c7b94d86f3241b98e470c88ebc68ee78d6463a8b678b37150194b4cd6119c
|
|
| MD5 |
002c9ef44b596a4ae83337135364ceb8
|
|
| BLAKE2b-256 |
c08ea8bef7f771208f06d4c56343b736b1ff165c5c763e14ed33ab4b300f9fcf
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp313-cp313-musllinux_1_2_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp313-cp313-musllinux_1_2_x86_64.whl -
Subject digest:
484c7b94d86f3241b98e470c88ebc68ee78d6463a8b678b37150194b4cd6119c - Sigstore transparency entry: 2773663460
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp313-cp313-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp313-cp313-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.13, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8fe00e8813515daee2045b111f2ae84a773576837c425d3a481774cd7cb9be1e
|
|
| MD5 |
49e951aa0e6fbeaa25b464af5d05445f
|
|
| BLAKE2b-256 |
a31d1161254c187983b420d8454ac1fccc5f9c32b1d840c304748cf74b52eb69
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp313-cp313-musllinux_1_2_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp313-cp313-musllinux_1_2_aarch64.whl -
Subject digest:
8fe00e8813515daee2045b111f2ae84a773576837c425d3a481774cd7cb9be1e - Sigstore transparency entry: 2773662036
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71f3e8f1847cfdb22a65a30b80b3249765ed305ceea94f9fcdff0d6c76428873
|
|
| MD5 |
ad53573cd3434fa71622ecd44be3ca4a
|
|
| BLAKE2b-256 |
dc0ecf9863e3b0d2de6b2c508808424417dad522eea5b74f8ac5cbefa3fe353c
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
71f3e8f1847cfdb22a65a30b80b3249765ed305ceea94f9fcdff0d6c76428873 - Sigstore transparency entry: 2773667488
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb1486f40422b396afec4a40ffb6ccf754b905fe1bf43b7575074b675d83be12
|
|
| MD5 |
9e88b68f17bc97a846c5f2e0e9c065ea
|
|
| BLAKE2b-256 |
e0e5c6ac8964cb0f4af89292307ecdfd28dc2a5ff560748f8f3090561c0f3b01
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
bb1486f40422b396afec4a40ffb6ccf754b905fe1bf43b7575074b675d83be12 - Sigstore transparency entry: 2773665300
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57632e52496348e5676b60b2182efc190b943d389d2e8ae821b9a64b11e1a3e6
|
|
| MD5 |
b3821d593e30b60167801119fb2f85ef
|
|
| BLAKE2b-256 |
0b80134b8111b5b7f6350b293072b13bf715c7488e39282edfdb022355f94dac
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp313-cp313-macosx_11_0_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp313-cp313-macosx_11_0_arm64.whl -
Subject digest:
57632e52496348e5676b60b2182efc190b943d389d2e8ae821b9a64b11e1a3e6 - Sigstore transparency entry: 2773665180
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp313-cp313-macosx_10_13_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp313-cp313-macosx_10_13_x86_64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.13, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
099aeb23b9120263ff7133cb609b2972a162840f063bbe036170339c79a224a3
|
|
| MD5 |
b032d39e0c9905b8c9a26f5d76812916
|
|
| BLAKE2b-256 |
13fad1b906c818e72eeefe921b815c4e84ce74b5e1db2f8cf5427f14771112b1
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp313-cp313-macosx_10_13_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp313-cp313-macosx_10_13_x86_64.whl -
Subject digest:
099aeb23b9120263ff7133cb609b2972a162840f063bbe036170339c79a224a3 - Sigstore transparency entry: 2773663898
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp312-cp312-win_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp312-cp312-win_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.12, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9df47dd942d33b1fb20a763426be7b15cfda889e56fd3b98c2d95414c6489185
|
|
| MD5 |
aae546e1d3d7a8dcb9a66a33c820966d
|
|
| BLAKE2b-256 |
4a22198d0cf9d0a87841841d1be9c194a140d98c12270b3e67879c3fb770b730
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp312-cp312-win_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp312-cp312-win_arm64.whl -
Subject digest:
9df47dd942d33b1fb20a763426be7b15cfda889e56fd3b98c2d95414c6489185 - Sigstore transparency entry: 2773666863
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fad6d8bddf4fd3211f713cf22d36c4c461b1c9d1a59dc39c407b0811535e5153
|
|
| MD5 |
95a7e67135a28db104e5a4e07e743dee
|
|
| BLAKE2b-256 |
2634414da295754483694c2bba5648a4640c73e74c03292bc6bfaf7f7974802e
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp312-cp312-win_amd64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp312-cp312-win_amd64.whl -
Subject digest:
fad6d8bddf4fd3211f713cf22d36c4c461b1c9d1a59dc39c407b0811535e5153 - Sigstore transparency entry: 2773663093
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp312-cp312-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp312-cp312-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.12, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2fec15d4fd6c19d7438742c021950ea57956dd7c5af6e5af8e45fb6fb8fea577
|
|
| MD5 |
dccf32fff406c8d10ed8eb67231a0917
|
|
| BLAKE2b-256 |
56b1c27ebd50d941f801107d5df390aff9a571467b608b6bbe7517b4fad8d48c
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp312-cp312-musllinux_1_2_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp312-cp312-musllinux_1_2_x86_64.whl -
Subject digest:
2fec15d4fd6c19d7438742c021950ea57956dd7c5af6e5af8e45fb6fb8fea577 - Sigstore transparency entry: 2773662773
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp312-cp312-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp312-cp312-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.12, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b726d174beee0016094dfa1808117f3fa9a666ee084d6beac530534588cb7e7
|
|
| MD5 |
342c4e6d21d0ed191c603bc5b6a220c0
|
|
| BLAKE2b-256 |
234dc33e644c5a42f83c5dd22966954e1a4b02b1e7e92b5c97e512af51f5d472
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp312-cp312-musllinux_1_2_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp312-cp312-musllinux_1_2_aarch64.whl -
Subject digest:
0b726d174beee0016094dfa1808117f3fa9a666ee084d6beac530534588cb7e7 - Sigstore transparency entry: 2773668046
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd3d55e0a6d2633307d5e3cb235b1d24f8bb81d9ffdd9959e571db27450c3f0c
|
|
| MD5 |
8838e7bebd0acec3c9f66bad96709700
|
|
| BLAKE2b-256 |
a05c84631cb1ec0267111000d709ed19443b8a0f3e9ede27280cd53d9796c82e
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
dd3d55e0a6d2633307d5e3cb235b1d24f8bb81d9ffdd9959e571db27450c3f0c - Sigstore transparency entry: 2773666754
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
162817afc8ee7c56d12feb16f5452c552ecfd36510f77718fc06c6ea86bf8f33
|
|
| MD5 |
4d755bfa93fbdd5884d5b27cbb6ca09f
|
|
| BLAKE2b-256 |
830acfb42ebd11c582dcd750113ae4af6a4cd7f530fb89a9a44976ad2831c047
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
162817afc8ee7c56d12feb16f5452c552ecfd36510f77718fc06c6ea86bf8f33 - Sigstore transparency entry: 2773662825
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
265db73c2012d803e918a5b20bcaa80d3fa5545ede43a3bb86054874fcf74af4
|
|
| MD5 |
dc1e754e2e0404fba933b1008a3af826
|
|
| BLAKE2b-256 |
356a5bd5b3453b890d9354034f8c2e9393e6c1d8d6bd8f78d1868a59301689ff
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
265db73c2012d803e918a5b20bcaa80d3fa5545ede43a3bb86054874fcf74af4 - Sigstore transparency entry: 2773664175
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp312-cp312-macosx_10_13_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp312-cp312-macosx_10_13_x86_64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.12, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a459b2b00a27216f7fe04bd37ff2af85b15873ee27b9b50d5e3381d580a3d18b
|
|
| MD5 |
895c1f7e1e033716008d9075ad3e17a1
|
|
| BLAKE2b-256 |
f12399f5796f5dcf93148c8d42de054c161c11a5e33f4af19a3438b6b48d56cb
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp312-cp312-macosx_10_13_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp312-cp312-macosx_10_13_x86_64.whl -
Subject digest:
a459b2b00a27216f7fe04bd37ff2af85b15873ee27b9b50d5e3381d580a3d18b - Sigstore transparency entry: 2773663963
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp311-cp311-win_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp311-cp311-win_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.11, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db7f2eb0837557bb4abfc500e68e46296b7cac3cd8d742b2c897c614dca0c05a
|
|
| MD5 |
6e2f81ae470178e8ed6da3c3fdbc0b1e
|
|
| BLAKE2b-256 |
bc7f91253a6632dfd7eeb15c0d60dd32b76ecd05fead0bbbae848f84e96f344f
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp311-cp311-win_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp311-cp311-win_arm64.whl -
Subject digest:
db7f2eb0837557bb4abfc500e68e46296b7cac3cd8d742b2c897c614dca0c05a - Sigstore transparency entry: 2773662939
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a45b66888b895bf36b1e6c2455c7983af6e634785a6057e742be0934af973e81
|
|
| MD5 |
c0cac556a2d86f4db6e34f76904ada3a
|
|
| BLAKE2b-256 |
cc8d74115de83eed08d956ff30afc0440046c4f80778bb63bec3c1ac5f149fd1
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp311-cp311-win_amd64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp311-cp311-win_amd64.whl -
Subject digest:
a45b66888b895bf36b1e6c2455c7983af6e634785a6057e742be0934af973e81 - Sigstore transparency entry: 2773662247
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp311-cp311-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp311-cp311-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.11, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad0acdcec0a47a2069471d3871a19f60f230a8103d758e382c43b35bd0ed0bc3
|
|
| MD5 |
d14fc036243bf573eb1215d4b617d9dd
|
|
| BLAKE2b-256 |
69e73d8488aac81b3ded7d14d4e24ba1d8b1f32b7581b26961f2753d2051b251
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp311-cp311-musllinux_1_2_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp311-cp311-musllinux_1_2_x86_64.whl -
Subject digest:
ad0acdcec0a47a2069471d3871a19f60f230a8103d758e382c43b35bd0ed0bc3 - Sigstore transparency entry: 2773663333
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp311-cp311-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp311-cp311-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.11, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f70220a2ba61f29d9362a642acfc88cf111b6847e53467dad3a7f624e4f3456
|
|
| MD5 |
c4409c15d997e865a68de7a1486d9ba6
|
|
| BLAKE2b-256 |
648c2008437211972d7b4e3a95f8821c7daa3b56785ba487223e7d9f7307b7d4
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp311-cp311-musllinux_1_2_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp311-cp311-musllinux_1_2_aarch64.whl -
Subject digest:
9f70220a2ba61f29d9362a642acfc88cf111b6847e53467dad3a7f624e4f3456 - Sigstore transparency entry: 2773668276
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95eada42924bc0536325ca7373716048ef4365c38a7cced615f951f8e2d67050
|
|
| MD5 |
e320ba23ef53ec35352c30f1565625e6
|
|
| BLAKE2b-256 |
b2ad186cbb94c77bee2a5c06ad10da60d560fff1eec29e90fa5a82f2f2d4f4eb
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
95eada42924bc0536325ca7373716048ef4365c38a7cced615f951f8e2d67050 - Sigstore transparency entry: 2773664520
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
423bb86832ebc45f660159c8cb1ccec05fe436049f0859f20933df607e444dfd
|
|
| MD5 |
c33186b01d4229f973e22a8d0ae52090
|
|
| BLAKE2b-256 |
09b8454d638e3eaa5618fac18a548e595e1d7641d273f3927c10b86641d77b8e
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
423bb86832ebc45f660159c8cb1ccec05fe436049f0859f20933df607e444dfd - Sigstore transparency entry: 2773664680
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e17742f82c689836277ad90c748bf0bb2233f79dbe1a319a29593696a99aa21f
|
|
| MD5 |
3d4a811928d27dfbadb11f2b26808ae5
|
|
| BLAKE2b-256 |
9898e2feafcdcbe1b97b2f827e2575f54489a199c7d8eb501cf840137a20e74d
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
e17742f82c689836277ad90c748bf0bb2233f79dbe1a319a29593696a99aa21f - Sigstore transparency entry: 2773666400
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp311-cp311-macosx_10_9_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp311-cp311-macosx_10_9_x86_64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.11, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2bf6827b1fbe2007c1cb444c64b02388882fc8b7cdb57c19202032a3778f7aba
|
|
| MD5 |
3ed5533b1491a94e0aa12777857cea83
|
|
| BLAKE2b-256 |
4171e82d6cbcb62db64e93a3b6588b4c28083d030d48ac84f399a920aa2c8371
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp311-cp311-macosx_10_9_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp311-cp311-macosx_10_9_x86_64.whl -
Subject digest:
2bf6827b1fbe2007c1cb444c64b02388882fc8b7cdb57c19202032a3778f7aba - Sigstore transparency entry: 2773664308
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d3a599cf71f8c13a1cc9572c6b7fbbd13a4c9bd3f9fdc579047fdc11c859d50
|
|
| MD5 |
5fe11d47840ce8b2c509d4928911cbe9
|
|
| BLAKE2b-256 |
f315dc1b096cc2f129738e5f57221a5e288828fcc60a633a5919af9f0000e87a
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp310-cp310-win_amd64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp310-cp310-win_amd64.whl -
Subject digest:
0d3a599cf71f8c13a1cc9572c6b7fbbd13a4c9bd3f9fdc579047fdc11c859d50 - Sigstore transparency entry: 2773663645
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp310-cp310-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp310-cp310-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.10, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f42221d7e6cf1a3636f60b291981f60100b2f13566af04c460bd0ec0f5b3a874
|
|
| MD5 |
ba4feb01973c755cda35101cfc69bc0b
|
|
| BLAKE2b-256 |
3ae43f430942bbc94c1b834ff5bc7c8b801b6895a2c2bf7aaf5d70678acb339a
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp310-cp310-musllinux_1_2_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp310-cp310-musllinux_1_2_x86_64.whl -
Subject digest:
f42221d7e6cf1a3636f60b291981f60100b2f13566af04c460bd0ec0f5b3a874 - Sigstore transparency entry: 2773667292
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp310-cp310-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp310-cp310-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.10, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b746ad33adb1404fd0e87113864da8cdb729b84b0e16d482c757c3b67e9fd068
|
|
| MD5 |
4857d8fbd6871d101ce77a0808ceef29
|
|
| BLAKE2b-256 |
24a0c7af99eccd6b8a2f603f309437e58d5c7640b12406a3635b5cb27f2e2443
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp310-cp310-musllinux_1_2_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp310-cp310-musllinux_1_2_aarch64.whl -
Subject digest:
b746ad33adb1404fd0e87113864da8cdb729b84b0e16d482c757c3b67e9fd068 - Sigstore transparency entry: 2773667402
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c27900abf367be4061df4df9b76340de74fff13ebe84fc278057c7539cd506b
|
|
| MD5 |
c31699da3c0869037d366705f79eca7e
|
|
| BLAKE2b-256 |
69eb58578ad6e86e74ad09b717fb067108a7718d15cf62acf1911b668b9edf47
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
5c27900abf367be4061df4df9b76340de74fff13ebe84fc278057c7539cd506b - Sigstore transparency entry: 2773667088
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d2f8d7643e945540c89a9af5ba9812bb671ca62ffc6847c41983dd7f72538c1
|
|
| MD5 |
6d8c7aa15cebc37c3e2259d129953e4e
|
|
| BLAKE2b-256 |
783f184b01c841b231a587a615895694c34d67b2f9e3ad477909561878515d61
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
4d2f8d7643e945540c89a9af5ba9812bb671ca62ffc6847c41983dd7f72538c1 - Sigstore transparency entry: 2773663017
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9009359e4ff398a8f0d59cdf13d05a7f1ed8ed2b8ffff96f3c22d31e436acff
|
|
| MD5 |
e9d68034617dc6c6a4ed3440da74c45d
|
|
| BLAKE2b-256 |
12c3352bbbad47a17529e989246db6d2f074f6150adab445e88e01d6088ac1fd
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp310-cp310-macosx_11_0_arm64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp310-cp310-macosx_11_0_arm64.whl -
Subject digest:
c9009359e4ff398a8f0d59cdf13d05a7f1ed8ed2b8ffff96f3c22d31e436acff - Sigstore transparency entry: 2773666605
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file btclib_secp256k1-0.8.0.6-cp310-cp310-macosx_10_9_x86_64.whl.
File metadata
- Download URL: btclib_secp256k1-0.8.0.6-cp310-cp310-macosx_10_9_x86_64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.10, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bfde40b7ef1115836a17c65a26a0298b776613ed8cfe14a54468e580ce61b706
|
|
| MD5 |
25f7cf59e8160da3f2a8eced04c48adc
|
|
| BLAKE2b-256 |
4bd968ca241ec74507d6759b2e56aa3d1d3727110cf3a0521ad6a68fb8dd7db4
|
Provenance
The following attestation bundles were made for btclib_secp256k1-0.8.0.6-cp310-cp310-macosx_10_9_x86_64.whl:
Publisher:
release.yml on btclib-org/btclib-secp256k1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btclib_secp256k1-0.8.0.6-cp310-cp310-macosx_10_9_x86_64.whl -
Subject digest:
bfde40b7ef1115836a17c65a26a0298b776613ed8cfe14a54468e580ce61b706 - Sigstore transparency entry: 2773661902
- Sigstore integration time:
-
Permalink:
btclib-org/btclib-secp256k1@0df539a9104953614cf68992dc26c5c6823e95f4 -
Branch / Tag:
refs/tags/v0.8.0.6 - Owner: https://github.com/btclib-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0df539a9104953614cf68992dc26c5c6823e95f4 -
Trigger Event:
push
-
Statement type: