-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update Getting-Started-with-Akka-http-signature.md #3
base: master
Are you sure you want to change the base?
Changes from 1 commit
595db63
5aca3c7
db93d16
9dca8c0
7281e3a
77326af
a10d456
d4e3797
fc3e478
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -15,7 +15,7 @@ The user can also run the rww-play web server and manipulate the access control | |
|
||
## The Key Pair | ||
|
||
The Akka-Http-Signature library uses asymmetrical cryptography. As detailed in the [Public-Key cryptography wikipedia page](https://en.wikipedia.org/wiki/Public-key_cryptography), this is a cryptographic system that uses pairs of private and public keys. The library uses them to form Digital Signatures. In such a system public keys can be looked up by anyone and private keys are only known by their owner. Communication is achieved the following way : | ||
The Akka-Http-Signature library uses what is known as asymmetrical cryptography. As detailed in the [Public-Key cryptography wikipedia page](https://en.wikipedia.org/wiki/Public-key_cryptography), this is a cryptographic system that uses pairs of private and public keys. The library uses them to form Digital Signatures. In such a system public keys can be looked up by anyone and private keys are only known by their owner. Communication is achieved the following way : | ||
1. The sender sends a message with a header that is signed by his own private key | ||
2. The server then receives the message and uses the sender's public key to verify that sender's identity | ||
|
||
|
@@ -114,7 +114,7 @@ This will save the contents of the key in String format within the file found by | |
|
||
### Saving a public Key to RDF | ||
|
||
A user can also transform his public keys to an RDF. In order to do this one must first import multiple files in order to resolve the required dependencies: | ||
One can also transform his public keys to a Pointed Graph. In order to do this one must first import multiple files in order to resolve the required dependencies: | ||
|
||
The org.w3 declarations required are: | ||
|
||
|
@@ -139,7 +139,7 @@ import run.cosy.solid.client.Web._ | |
import java.security.interfaces.RSAPublicKey | ||
``` | ||
|
||
Finally, after that, the user can create a value for the public key String collected from the .pem file in located within the .keys directory. | ||
Finally, after that, the user can [marshal (de-serialise)](http://doc.akka.io/docs/akka-http/10.0.9/scala/http/common/unmarshalling.html#unmarshalling) the public key String collected from the .pem file in located within the .keys directory. Different software can make use of this key at different times so it needs to be stored in a readily available form | ||
|
||
```scala | ||
@ val pubStr = read(home/".keys"/"pubKey.pem") | ||
|
@@ -153,7 +153,7 @@ hHhTWQIDAQAB""" | |
|
||
``` | ||
|
||
After this all dependencies should be resolved and the user will be able to transform the keys into a Pointed Graph using the following function | ||
After this all dependencies should be resolved and the user will be able to transform the keys into a Pointed Graph using the following code - one can always add more specifics and attributed to make turn this into a function. | ||
|
||
```scala | ||
@ def pubKeyPG = { | ||
|
@@ -171,20 +171,16 @@ After that the user can simply call said function to get a pointed graph: | |
|
||
res44: Try[PointedGraph[Jena]] = Success(org.w3.banana.PointedGraph$$anon$1@5487b93e) | ||
``` | ||
The function pubKeyPG returns a Try[PointedGraph[Jena]]. We can then retreive both the pointer and the graph from this PointedGraph like so: | ||
The function pubKeyPG returns a Try[PointedGraph[Jena]]. We can then retreive both the pointer and the graph from this PointedGraph and return them as a pair like so: | ||
|
||
```scala | ||
@ val keyFinalPointer= keyGraph.get.pointer | ||
|
||
keyFinalPointer: Jena#Node = #key | ||
|
||
|
||
@ val keyFinalGraph = keyGraph.get.graph | ||
|
||
keyFinalGraph: Jena#Graph = {#key @http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://www.w3.org/ns/auth/cert#RSAPublicKey; #key @http://www.w3.org/ns/auth/cert#modulus "009195c8e386fc421ee8357cc6be674649a9f5722b1dccebab5965a1792c6fafdcc77b9932361f14b5565e5634ec46bfd29f0130aa6d4a2518aed027e7ca34d99a1419262b590e383eb13743c77a5cc67b4231f7248117da1be3233836cbd954cd1f368360795ec7457021370f1fb4633f1259c9898095583e31631f5f654e04fa9d0516713b40f21fa91a90436d813d1327d5cd115587fa0a5ecdceba8e0a6dcffc2bcb309a5686dd174e364ef439568642e606af50c803b874b74e24fd2d70454f71e0035f21d2a6990e4c097ba9870ff6942d5ad96317fd8ab1894004b66934073bfcdd4496b394c5fba1642b551a4299ccff04ba60c73e31f480b484785359"^^http://www.w3.org/2001/XMLSchema#hexBinary; #key @http://www.w3.org/ns/auth/cert#exponent "65537"^^http://www.w3.org/2001/XMLSchema#integer} | ||
@ val(keyFinalPointer, keyFinalGraph) = (keyGraph.get.pointer -> keyGraph.get.graph) | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
pointer: Jena#Node = #key | ||
graph: Jena#Graph = {#key @http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://www.w3.org/ns/auth/cert#RSAPublicKey; #key @http://www.w3.org/ns/auth/cert#modulus "009195c8e386fc421ee8357cc6be674649a9f5722b1dccebab5965a1792c6fafdcc77b9932361f14b5565e5634ec46bfd29f0130aa6d4a2518aed027e7ca34d99a1419262b590e383eb13743c77a5cc67b4231f7248117da1be3233836cbd954cd1f368360795ec7457021370f1fb4633f1259c9898095583e31631f5f654e04fa9d0516713b40f21fa91a90436d813d1327d5cd115587fa0a5ecdceba8e0a6dcffc2bcb309a5686dd174e364ef439568642e606af50c803b874b74e24fd2d70454f71e0035f21d2a6990e4c097ba9870ff6942d5ad96317fd8ab1894004b66934073bfcdd4496b394c5fba1642b551a4299ccff04ba60c73e31f480b484785359"^^http://www.w3.org/2001/XMLSchema#hexBinary; #key @http://www.w3.org/ns/auth/cert#exponent "65537"^^http://www.w3.org/2001/XMLSchema#integer} | ||
|
||
``` | ||
As evident, the pointer of this graph is a useful identifier "#key" and the graph itself is the key information. | ||
As evident, the pointer of this graph uses the relative URL "#key" as its identifier. This is useful as it allows the parties that have access to the public key easier access to that information. It is also convenient as, when dealing with the access control one can use this identifier to make sure the .acl agents are linked to this specific key file. | ||
|
||
The user can transform his key graph into a one of several well-known formats before publishing it on the server. One such format is turtle. In order to do that however, more external libraries are required: | ||
|
||
|
@@ -215,10 +211,10 @@ write(wd/"publicKey.ttl", toTurtle) | |
|
||
### Attaching Public keys to a File/URI | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Publishing the Public key to the WebThere are a number of ad hoc ways to do this and one simple standard way to publish it.
For illustration see the document [ I pointed you to twice already] and to the setup for rww-play. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. can you please add that to the doc as is, with the last link filled in. |
||
|
||
The most efficient way to attach a public key to a server is by using the rww-play library's httpMethods.sc script which makes use of the solid-server POST definition. That way the user can use the postLocal() and postLocalGood() functions to pubish his public key on a web and local server respectively. | ||
The most efficient way to attach a public key to a server is by using the httpMethods.sc script which can be found in the [Read-write-web/Banana-wiki github repository](https://github.com/read-write-web/banana-wiki). This script makes use of the solid-server POST definition. That way the user can use the postLocal() and postLocalGood() functions to pubish his public key on a web and local server respectively. | ||
|
||
```scala | ||
Code but errors not resolved | ||
()Code but errors not resolved | ||
``` | ||
|
||
One can use the `cp` or the `mv` Ammonite commands to move the public key file into the test_www directory which resides within the rww-play directory. The process of attaching the file, containing the key to a URI is very similar. | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
add that the server discovers the public key through using the
keyId
argument passed in the the message sent by the client. The rww-play server works with http and https:// urls and fetches the public key that way.