166 lines
4.5 KiB
Markdown
166 lines
4.5 KiB
Markdown
# libcryptoconditions [](https://travis-ci.org/libscott/libcryptoconditions)
|
|
|
|
Interledger Crypto-Conditions in C, targeting spec [draft-thomas-crypto-conditions-03](https://tools.ietf.org/html/draft-thomas-crypto-conditions-03).
|
|
|
|
Features shared object and easy to use JSON api, as well as a command line interface written in Python.
|
|
|
|
## Quickstart
|
|
|
|
```shell
|
|
git clone --recursive https://github.com/libscott/libcryptoconditions
|
|
cd libcryptoconditions
|
|
./autogen.sh
|
|
./configure
|
|
make
|
|
./cryptoconditions.py --help
|
|
```
|
|
|
|
## Status
|
|
|
|
JSON interface may not be particularly safe. The rest is pretty good now.
|
|
|
|
## Embedding
|
|
|
|
For the binary interface, see [cryptoconditions.h](./include/cryptoconditions.h).
|
|
|
|
To embed in other languages, the easiest way may be to call the JSON RPC method via FFI. This is how it looks in Python:
|
|
|
|
```python
|
|
import json
|
|
from ctypes import *
|
|
|
|
so = cdll.LoadLibrary('.libs/libcryptoconditions.so')
|
|
so.jsonRPC.restype = c_char_p
|
|
|
|
def call_cryptoconditions_rpc(method, params):
|
|
out = so.jsonRPC(json.dumps({
|
|
'method': method,
|
|
'params': params,
|
|
}))
|
|
return json.loads(out)
|
|
```
|
|
|
|
## JSON methods
|
|
|
|
### encodeCondition
|
|
|
|
Encode a JSON condition to a base64 binary string
|
|
|
|
```shell
|
|
cryptoconditions encodeCondition '{
|
|
"type": "ed25519-sha-256",
|
|
"publicKey": "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo"
|
|
}'
|
|
{
|
|
"bin": "pCeAIHmSOauo_E_36r-8TETmnovf7ZkzJOEu1keSq-KJzx1fgQMCAAA",
|
|
"uri": "ni:///sha-256;eZI5q6j8T_fqv7xMROaei9_tmTMk4S7WR5Kr4onPHV8?fpt=ed25519-sha-256&cost=131072"
|
|
}
|
|
```
|
|
|
|
### decodeCondition
|
|
|
|
Decode a binary condition
|
|
|
|
```shell
|
|
cryptoconditions decodeCondition '{
|
|
"bin": "pCeAIHmSOauo_E_36r-8TETmnovf7ZkzJOEu1keSq-KJzx1fgQMCAAA"
|
|
}'
|
|
{
|
|
"bin": "pCeAIHmSOauo_E_36r-8TETmnovf7ZkzJOEu1keSq-KJzx1fgQMCAAA",
|
|
"uri": "ni:///sha-256;eZI5q6j8T_fqv7xMROaei9_tmTMk4S7WR5Kr4onPHV8?fpt=ed25519-sha-256&cost=131072"
|
|
}
|
|
```
|
|
|
|
### encodeFulfillment
|
|
|
|
Encode a JSON condition to a binary fulfillment. The condition must be fulfilled, that is,
|
|
it needs to have signatures present.
|
|
|
|
```shell
|
|
cryptoconditions encodeFulfillment '{
|
|
{
|
|
"type": "ed25519-sha-256",
|
|
"publicKey": "E0x0Ws4GhWhO_zBoUyaLbuqCz6hDdq11Ft1Dgbe9y9k",
|
|
"signature": "jcuovSRpHwqiC781KzSM1Jd0Qtyfge0cMGttUdLOVdjJlSBFLTtgpinASOaJpd-VGjhSGWkp1hPWuMAAZq6pAg"
|
|
}'
|
|
{
|
|
"fulfillment": "pGSAIBNMdFrOBoVoTv8waFMmi27qgs-oQ3atdRbdQ4G3vcvZgUCNy6i9JGkfCqILvzUrNIzUl3RC3J-B7Rwwa21R0s5V2MmVIEUtO2CmKcBI5oml35UaOFIZaSnWE9a4wABmrqkC"
|
|
}
|
|
|
|
```
|
|
|
|
### decodeFulfillment
|
|
|
|
Decode a binary fulfillment
|
|
|
|
```shell
|
|
cryptoconditions decodeFulfillment '{
|
|
"fulfillment": "pGSAINdamAGCsQq31Uv-08lkBzoO4XLz2qYjJa8CGmj3B1EagUDlVkMAw2CscpCG4syAboKKhId_Hrjl2XTYc-BlIkkBVV-4ghWQozusxh45cBz5tGvSW_XwWVu-JGVRQUOOehAL"
|
|
}'
|
|
{
|
|
"bin": "pCeAIHmSOauo_E_36r-8TETmnovf7ZkzJOEu1keSq-KJzx1fgQMCAAA",
|
|
"uri": "ni:///sha-256;eZI5q6j8T_fqv7xMROaei9_tmTMk4S7WR5Kr4onPHV8?fpt=ed25519-sha-256&cost=131072"
|
|
}
|
|
```
|
|
|
|
### verifyFulfillment
|
|
|
|
Verify a fulfillment against a message and a condition URL
|
|
|
|
```shell
|
|
cryptoconditions verifyFulfillment '{
|
|
"message": "",
|
|
"fulfillment": "pGSAINdamAGCsQq31Uv-08lkBzoO4XLz2qYjJa8CGmj3B1EagUDlVkMAw2CscpCG4syAboKKhId_Hrjl2XTYc-BlIkkBVV-4ghWQozusxh45cBz5tGvSW_XwWVu-JGVRQUOOehAL",
|
|
"condition": "pCeAIHmSOauo_E_36r-8TETmnovf7ZkzJOEu1keSq-KJzx1fgQMCAAA"
|
|
}
|
|
{
|
|
"valid": true
|
|
}
|
|
```
|
|
|
|
### signTreeEd25519
|
|
|
|
Sign all ed25519 nodes in a condition tree
|
|
|
|
```shell
|
|
cryptoconditions signTreeEd25519 '{
|
|
"condition": {
|
|
"type": "ed25519-sha-256",
|
|
"publicKey": "E0x0Ws4GhWhO_zBoUyaLbuqCz6hDdq11Ft1Dgbe9y9k",
|
|
},
|
|
"privateKey": "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo",
|
|
"message": "",
|
|
}'
|
|
{
|
|
"num_signed": 1,
|
|
"condition": {
|
|
"type": "ed25519-sha-256",
|
|
"publicKey": "E0x0Ws4GhWhO_zBoUyaLbuqCz6hDdq11Ft1Dgbe9y9k",
|
|
"signature": "jcuovSRpHwqiC781KzSM1Jd0Qtyfge0cMGttUdLOVdjJlSBFLTtgpinASOaJpd-VGjhSGWkp1hPWuMAAZq6pAg"
|
|
}
|
|
}
|
|
```
|
|
|
|
### signTreeSecp256k1
|
|
|
|
Sign all secp256k1 nodes in a condition tree
|
|
|
|
```shell
|
|
cryptoconditions signTreeSecp256k1 '{
|
|
"condition": {
|
|
"type": "secp256k1-sha-256",
|
|
"publicKey": "AmkauD4tVL5-I7NN9hE_A8SlA0WdCIeJe_1Nac_km1hr",
|
|
},
|
|
"privateKey": "Bxwd5hOLZcTvzrR5Cupm3IV7TWHHl8nNLeO4UhYfRs4",
|
|
"message": "",
|
|
}'
|
|
{
|
|
"num_signed": 1,
|
|
"condition": {
|
|
"type": "secp256k1-sha-256",
|
|
"publicKey": "AmkauD4tVL5-I7NN9hE_A8SlA0WdCIeJe_1Nac_km1hr",
|
|
"signature": "LSQLzZo4cmt04KoCdoFcbIJX5MZ9CM6324SqkdqV1PppfUwquiWa7HD97hf4jdkdqU3ep8ZS9AU7zEJoUAl_Gg"
|
|
}
|
|
}
|
|
```
|