Skip to content

Commit d2ba351

Browse files
added an example for ed25519 (#282)
Co-authored-by: Ovidiu Ionescu <ovidiu@ionescu.net>
1 parent 708d452 commit d2ba351

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

examples/ed25519.rs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
use jsonwebtoken::{
2+
decode, encode, get_current_timestamp, Algorithm, DecodingKey, EncodingKey, Validation,
3+
};
4+
use ring::signature::{Ed25519KeyPair, KeyPair};
5+
use serde::{Deserialize, Serialize};
6+
7+
#[derive(Debug, Serialize, Deserialize)]
8+
pub struct Claims {
9+
sub: String,
10+
exp: u64,
11+
}
12+
13+
fn main() {
14+
let doc = Ed25519KeyPair::generate_pkcs8(&ring::rand::SystemRandom::new()).unwrap();
15+
let encoding_key = EncodingKey::from_ed_der(doc.as_ref());
16+
17+
let pair = Ed25519KeyPair::from_pkcs8(doc.as_ref()).unwrap();
18+
let decoding_key = DecodingKey::from_ed_der(pair.public_key().as_ref());
19+
20+
let claims = Claims { sub: "test".to_string(), exp: get_current_timestamp() };
21+
22+
let token =
23+
encode(&jsonwebtoken::Header::new(Algorithm::EdDSA), &claims, &encoding_key).unwrap();
24+
25+
let validation = Validation::new(Algorithm::EdDSA);
26+
let _token_data = decode::<Claims>(&token, &decoding_key, &validation).unwrap();
27+
}
28+
29+
#[cfg(test)]
30+
mod tests {
31+
use super::*;
32+
33+
struct Jot {
34+
encoding_key: EncodingKey,
35+
decoding_key: DecodingKey,
36+
}
37+
38+
impl Jot {
39+
fn new() -> Jot {
40+
let doc = Ed25519KeyPair::generate_pkcs8(&ring::rand::SystemRandom::new()).unwrap();
41+
let encoding_key = EncodingKey::from_ed_der(doc.as_ref());
42+
43+
let pair = Ed25519KeyPair::from_pkcs8(doc.as_ref()).unwrap();
44+
let decoding_key = DecodingKey::from_ed_der(pair.public_key().as_ref());
45+
Jot { encoding_key, decoding_key }
46+
}
47+
}
48+
49+
#[test]
50+
fn test() {
51+
let jot = Jot::new();
52+
let claims = Claims { sub: "test".to_string(), exp: get_current_timestamp() };
53+
54+
let token =
55+
encode(&jsonwebtoken::Header::new(Algorithm::EdDSA), &claims, &jot.encoding_key)
56+
.unwrap();
57+
58+
let validation = Validation::new(Algorithm::EdDSA);
59+
let token_data = decode::<Claims>(&token, &jot.decoding_key, &validation).unwrap();
60+
assert_eq!(token_data.claims.sub, "test");
61+
}
62+
}

0 commit comments

Comments
 (0)