Skip to content
File

Blob: src/workerd/server/actor-id-impl.h

cpp49 lines
1#pragma once
2 
3#include <workerd/io/actor-id.h>
4 
5#include <openssl/sha.h>
6 
7namespace workerd::server {
8class ActorIdFactoryImpl final: public ActorIdFactory {
9 public:
10 ActorIdFactoryImpl(kj::StringPtr uniqueKey);
11 ActorIdFactoryImpl(const kj::byte keyParam[SHA256_DIGEST_LENGTH]);
12 
13 class ActorIdImpl final: public ActorId {
14 public:
15 ActorIdImpl(const kj::byte idParam[SHA256_DIGEST_LENGTH], kj::Maybe<kj::String> name);
16 
17 kj::String toString() const override;
18 kj::Maybe<kj::StringPtr> getName() const override;
19 kj::Maybe<kj::StringPtr> getJurisdiction() const override;
20 bool equals(const ActorId& other) const override;
21 kj::Own<ActorId> clone() const override;
22 
23 void clearName() {
24 name = kj::none;
25 }
26 
27 private:
28 kj::byte id[SHA256_DIGEST_LENGTH];
29 kj::Maybe<kj::String> name;
30 };
31 
32 kj::Own<ActorId> newUniqueId(kj::Maybe<kj::StringPtr> jurisdiction) override;
33 kj::Own<ActorId> idFromName(kj::String name) override;
34 kj::Own<ActorId> idFromString(kj::String str) override;
35 kj::Own<ActorIdFactory> cloneWithJurisdiction(
36 kj::Maybe<kj::StringPtr> maybeJurisdiction) override;
37 bool matchesJurisdiction(const ActorId& id) override;
38 
39 private:
40 kj::byte key[SHA256_DIGEST_LENGTH];
41 
42 uint64_t counter = 0; // only used in predictable mode
43 
44 static constexpr size_t BASE_LENGTH = SHA256_DIGEST_LENGTH / 2;
45 void computeMac(kj::byte id[BASE_LENGTH + SHA256_DIGEST_LENGTH]);
46};
47 
48} // namespace workerd::server