Skip to content

Commit 150952a

Browse files
committed
chore: update docker building action
1 parent 97d4a86 commit 150952a

File tree

7 files changed

+38
-84
lines changed

7 files changed

+38
-84
lines changed

.github/workflows/build-dockers.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,11 @@ jobs:
2121
LATEST_TAG="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest"
2222
TAGS="-t ${IMAGE_TAG} -t ${LATEST_TAG}"
2323
docker buildx build --platform='linux/amd64,linux/arm64' $TAGS --push .
24+
IMAGE_TAG="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}_enclave_arm64:${{ github.ref_name }}"
25+
LATEST_TAG="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}_enclave_arm64:latest"
26+
TAGS="-t ${IMAGE_TAG} -t ${LATEST_TAG}"
27+
docker build -f enclave/arm64.Dockerfile $TAGS --push .
28+
IMAGE_TAG="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}_enclave_amd64:${{ github.ref_name }}"
29+
LATEST_TAG="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}_enclave_amd64:latest"
30+
TAGS="-t ${IMAGE_TAG} -t ${LATEST_TAG}"
31+
docker build -f enclave/amd64.Dockerfile $TAGS --push .

Cargo.lock

Lines changed: 0 additions & 72 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,20 @@ cargo run -p idempotent-proxy-server
6868

6969
https://docs.marlin.org/user-guides/oyster/instances/quickstart/build
7070

71+
The following steps should be run in AWS Nitro-based instances.
72+
73+
Spin up a new Docker container based on our nitro-cli image and mount the current directory using:
74+
```bash
75+
sudo docker run --rm --privileged --name nitro-cli -v `pwd`:/mnt/my-server marlinorg/nitro-cli
76+
```
77+
78+
In a new terminal, run
7179
```bash
72-
docker build -f enclave/arm64.Dockerfile -t enclave:latest .
80+
cd /mnt/my-server
81+
sudo docker exec -it nitro-cli sh
82+
# or docker pull enclave image
83+
docker build -f enclave/arm64.Dockerfile -t enclave_arm64:latest .
84+
nitro-cli build-enclave --docker-uri enclave_arm64:latest --output-file enclave_arm64.eif
7385
```
7486

7587
### Running as Cloudflare Worker

src/idempotent-proxy-server/src/cache/memory.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
use async_trait::async_trait;
2+
use idempotent_proxy_types::unix_ms;
23
use std::{
34
collections::{
45
hash_map::{Entry, HashMap},
56
BTreeSet,
67
},
78
sync::Arc,
89
};
9-
use structured_logger::unix_ms;
1010
use tokio::{
1111
sync::RwLock,
1212
time::{sleep, Duration},
@@ -39,7 +39,6 @@ impl MemoryCacher {
3939

4040
kv.remove(&key);
4141
}
42-
()
4342
})
4443
}
4544
}

src/idempotent-proxy-types/Cargo.toml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,17 @@ license.workspace = true
1313
[lib]
1414

1515
[dependencies]
16-
axum = { workspace = true }
1716
http = { workspace = true }
18-
async-trait = { workspace = true }
1917
serde = { workspace = true }
2018
serde_json = { workspace = true }
2119
serde_bytes = { workspace = true }
2220
ciborium = { workspace = true }
23-
anyhow = { workspace = true }
2421
k256 = { workspace = true }
2522
ed25519-dalek = { workspace = true }
26-
base64 = { workspace = true }
2723
sha3 = { workspace = true }
28-
chrono = { workspace = true }
2924

3025
[dev-dependencies]
26+
base64 = { workspace = true }
3127
rand_core = "0.6"
3228
hex = { package = "hex-conservative", version = "0.2", default-features = false, features = [
3329
"alloc",

src/idempotent-proxy-types/src/auth.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ use serde::{Deserialize, Serialize};
88
use serde_bytes::ByteBuf;
99
use sha3::{Digest, Sha3_256};
1010

11+
use crate::unix_ms;
12+
1113
const PERMITTED_DRIFT: u64 = 10; // seconds
1214

1315
// Token format: [expire_at in seconds, agent, signature]
@@ -27,7 +29,7 @@ pub fn ed25519_sign(key: &ed25519_dalek::SigningKey, expire_at: u64, agent: Stri
2729

2830
pub fn ed25519_verify(keys: &[ed25519_dalek::VerifyingKey], data: &[u8]) -> Result<Token, String> {
2931
let token: Token = from_reader(data).map_err(|_err| "failed to decode CBOR data")?;
30-
if token.0 + PERMITTED_DRIFT < chrono::Utc::now().timestamp() as u64 {
32+
if token.0 + PERMITTED_DRIFT < unix_ms() / 1000 {
3133
return Err("token expired".to_string());
3234
}
3335
let sig = ed25519_dalek::Signature::from_slice(token.2.as_slice())
@@ -60,7 +62,7 @@ pub fn ecdsa_sign(key: &ecdsa::SigningKey, expire_at: u64, agent: String) -> Vec
6062
// Secp256k1
6163
pub fn ecdsa_verify(keys: &[ecdsa::VerifyingKey], data: &[u8]) -> Result<Token, String> {
6264
let token: Token = from_reader(data).map_err(|_err| "failed to decode CBOR data")?;
63-
if token.0 + PERMITTED_DRIFT < chrono::Utc::now().timestamp() as u64 {
65+
if token.0 + PERMITTED_DRIFT < unix_ms() / 1000 {
6466
return Err("token expired".to_string());
6567
}
6668
let sig = ecdsa::Signature::try_from(token.2.as_slice())
@@ -98,7 +100,7 @@ mod test {
98100
let signing_key: ed25519_dalek::SigningKey =
99101
ed25519_dalek::SigningKey::from_bytes(&secret_key);
100102
let agent = "alice".to_string();
101-
let expire_at = chrono::Utc::now().timestamp() as u64 + 3600;
103+
let expire_at = unix_ms() / 1000 + 3600;
102104
let signed = super::ed25519_sign(&signing_key, expire_at, agent.clone());
103105
let token = super::ed25519_verify(&[signing_key.verifying_key()], &signed).unwrap();
104106
assert_eq!(token.0, expire_at);
@@ -110,7 +112,7 @@ mod test {
110112
fn test_secp256k1_token() {
111113
let signing_key = ecdsa::SigningKey::random(&mut OsRng);
112114
let agent = "alice".to_string();
113-
let expire_at = chrono::Utc::now().timestamp() as u64 + 3600;
115+
let expire_at = unix_ms() / 1000 + 3600;
114116
let signed = super::ecdsa_sign(&signing_key, expire_at, agent.clone());
115117
let token =
116118
super::ecdsa_verify(&[ecdsa::VerifyingKey::from(&signing_key)], &signed).unwrap();

src/idempotent-proxy-types/src/lib.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use http::header::HeaderName;
2+
use std::time::{SystemTime, UNIX_EPOCH};
23

34
pub mod auth;
45

@@ -13,3 +14,11 @@ pub static HEADER_RESPONSE_HEADERS: HeaderName = HeaderName::from_static("respon
1314
pub fn err_string(err: impl std::fmt::Display) -> String {
1415
err.to_string()
1516
}
17+
18+
/// Returns the current unix timestamp in milliseconds.
19+
pub fn unix_ms() -> u64 {
20+
let ts = SystemTime::now()
21+
.duration_since(UNIX_EPOCH)
22+
.expect("system time before Unix epoch");
23+
ts.as_millis() as u64
24+
}

0 commit comments

Comments
 (0)