Commit Graph
40 Commits
Author SHA1 Message Date
hai007 00a2999269 Format all the files in CL786733783
PiperOrigin-RevId: 786873870
2025-07-24 16:25:18 -07:00
hai007 71cdf84236 Replace NEARBY_LOGS with LOG for all coding under google3/third_party/nearby/
PiperOrigin-RevId: 786733783
2025-07-24 09:34:17 -07:00
hai007 05ae5583f8 Move crypto-related symbols from ::crypto:: to ::nearby::crypto:: to deconflict
them with chromium ::crypto symbols of the same names.

PiperOrigin-RevId: 684566882
2024-10-10 13:54:53 -07:00
Anay Wadhera f26d25ed01 Provide a platform abstraction for RandBytes instead of swapping headers
The `RandBytes` functions were being placed in the `crypto` namespace,
which collides with Chromium's namespace of the same name. Within,
`RandBytes` was defined with almost-the-same API. Then in Chromium
builds, the Chromium header would be used instead (though somewhat
inconsistently).

This creates a lot of pain for Chromium development as there's a
third-party repository directly depending on headers from Chromium's
source tree, and is against the third-party policies for that reason.
There are a number of other headers that mirror Chromium and are
swapped out in the Chromium build that will cause similar pain, such as:
```
include "crypto/aead.h"
include "crypto/ec_private_key.h"
include "crypto/hkdf.h"
```

This CL provides a template for how to get rid of these header swaps and
give a platform abstraction in nearby instead.

We provide a platform abstraction in `platform/crypto.h` (really in
`platform/implementation/crypto.h`) which is implemented in
`platform/implementation/shared/crypto.cc`. However that implementation
is removed by `#ifdef` when in the Chromium build.

Then, in the Chromium repo, we will add (separately) an implementation
of the same abstraction in `//third_party/nearby/platform_impl` with GN
rules to include it in the build. It will replace the implementation
from the nearby repo.

Copybara import of the project:

--
6ca8099 by danakj <danakj@chromium.org>:

Provide a platform abstraction for RandBytes instead of swapping headers

The `RandBytes` functions were being placed in the `crypto` namespace,
which collides with Chromium's namespace of the same name. Within,
`RandBytes` was defined with almost-the-same API. Then in Chromium
builds, the Chromium header would be used instead (though somewhat
inconsistently).

This creates a lot of pain for Chromium development as there's a
third-party repository directly depending on headers from Chromium's
source tree, and is against the third-party policies for that reason.
There are a number of other headers that mirror Chromium and are
swapped out in the Chromium build that will cause similar pain, such as:
```
include "crypto/aead.h"
include "crypto/ec_private_key.h"
include "crypto/hkdf.h"
```

This CL provides a template for how to get rid of these header swaps and
give a platform abstraction in nearby instead.

We provide a platform abstraction in `platform/crypto.h` (really in
`platform/implementation/crypto.h`) which is implemented in
`platform/implementation/shared/crypto.cc`. However that implementation
is removed by `#ifdef` when in the Chromium build.

Then, in the Chromium repo, we will add (separately) an implementation
of the same abstraction in `//third_party/nearby/platform_impl` with GN
rules to include it in the build. It will replace the implementation
from the nearby repo.

--
9c2654b by danakj <danakj@chromium.org>:

Remove CryptoSpan, use absl::Span

The header swapping of Chromium crypto libraries is
problematic, but absl::Span will convert to base::span
so there's no need for the typedef even without
removing the header swapping yet.

--
df1135d by danakj <danakj@chromium.org>:

Add missing files

--
ab18a15 by danakj <danakj@chromium.org>:

Remove the random_unittest.cc from Swift build

The file moved, so the Swift package needs its path
updated.

--
2038f78 by danakj <danakj@chromium.org>:

Combine crypto unittests into crypto_test.cc

--
f7ad176 by danakj <danakj@chromium.org>:

Add stdint and stddef includes for uint8_t and size_t

--
9f04590 by danakj <danakj@chromium.org>:

Mark the shared crypto implementation compatable_with non_prod

--
18eeafd by danakj <danakj@chromium.org>:

Add IWYU pragma for crypto implementation

PiperOrigin-RevId: 632150866
2024-05-09 08:02:50 -07:00
Hai Shang bc44fee374 use abs to make sure the id is not negative
PiperOrigin-RevId: 631891168
2024-05-08 12:42:34 -07:00
Ryan Hansberry cc84b6f4a4 Make credential refill asynchronous
Fixes a ChromeOS-deadlock during credential refill. The
previous logic blocked the IO thread that ChromeOS is using
to listen for responses from its CredentialStorage layer,
thus preventing it from signaling the latch.

Given that CheckCredentialsAndRefillIfNeeded is meant to
be async (given its continuation-passing style), this CL
avoids any thread trickiness by removing any latch-waiting
within the function. The nice side-effect of this is breaking
up the function into 3 smaller functions, which should
hopefully make it a bit more readable.

//.../g3/credential_storage_impl.cc has its mutex locks
removed -- they otherwise cause deadlocks, and are now
unnecessary.

This CL introduces a CHECK_EQ to ensure that the number of
remaining valid (not-expired) credentials is equal across the
shared and local list. This actually exposed a bug in the
credential_manager_impl_test.cc -- the test was only expiring
a public credential, and not its corresponding private credential.
Thus, the test is also updated in this CL to correctly mark
the first credential of the shared and local list as expired.

PiperOrigin-RevId: 631822135
2024-05-08 09:14:53 -07:00
Hai Shang 17df967296 replace secrect_id to id inside presence credential manager
PiperOrigin-RevId: 630558485
2024-05-03 19:28:48 -07:00
Suet-Fei Li 989efcf2c5 Metadata to DeviceIdentityMetaData Migration
PiperOrigin-RevId: 616182462
2024-03-15 10:57:58 -07:00
Ryan Hansberry 8561d03a21 [Nearby] CredentialManager: Do not block on main thread.
PiperOrigin-RevId: 608743138
2024-02-20 14:37:12 -08:00
Anthony Rueda 96750db706 [Presence] Renamemetadata_encryption_key_tag fields in shared credential proto to differentiate between V0/V1 unsigned adv key tags
PiperOrigin-RevId: 558919544
2023-08-21 15:39:35 -07:00
Crisrael Lucero 0e44ed626d Refactor crypto/ directory into crypto_cros/ and crypto/
PiperOrigin-RevId: 549467911
2023-07-19 17:12:52 -07:00
Hai Shang e949d922de Refill creds if needed in getting shared & local creds.
PiperOrigin-RevId: 546093134
2023-07-06 14:28:58 -07:00
Anthony Rueda 72b249474d Extend local and shared credential protos to included duplicated metadata_encryption_key and metadata_encryption_key_tag for all protocol version
PiperOrigin-RevId: 538612138
2023-06-07 15:43:30 -07:00
Suet-Fei Li 31f3f53000 Fix crypto include path for Chromium.
PiperOrigin-RevId: 524452486
2023-04-14 20:56:29 -07:00
Janusz Sobczak 5f4144cd0b Update SharedCredential definition
PiperOrigin-RevId: 507568902
2023-02-06 13:33:23 -08:00
Janusz Sobczak 2746a4aa2f Fix field sizes in credentials
authenticity_key must be 32 bytes. metadata_encryption_key must be 14 bytes.

PiperOrigin-RevId: 505183908
2023-01-27 12:34:51 -08:00
Janusz Sobczak 94e70d0ddd Store consumed salts in private credentials
PiperOrigin-RevId: 505167378
2023-01-27 11:30:54 -08:00
Janusz Sobczak eb282a64da Set credential start&end times
PiperOrigin-RevId: 504880260
2023-01-26 10:33:22 -08:00
Anay Wadhera c58b45eb50 Rename PublicCredential to SharedCredential and PrivateCredential to LocalCredential
PiperOrigin-RevId: 503221477
2023-01-24 12:09:21 -08:00
Janusz Sobczak ca547df4d7 Subscribe for public credentials update
Nearby Presence scanning sessions may be very long. We need a way to notify the scanner that new credentials were added during scanning.
`SubscribeForPublicCredentials()` allows us to subscribe for such updates.

PiperOrigin-RevId: 502699345
2023-01-17 15:07:14 -08:00
Anay Wadhera 44fb63f498 Use CredentialSelector for GenerateCredentials()
PiperOrigin-RevId: 501951868
2023-01-13 15:23:35 -08:00
Janusz Sobczak 0e2111afc2 Collapse success&failure callbacks into one
Instead of two callbacks:
- void on_success(Result result)
- void on_failure(Status status)
use just one callback:
void on_result(StatusOr<Result> result)

PiperOrigin-RevId: 501912034
2023-01-13 12:28:47 -08:00
Anay Wadhera 7667420e2b Use CredentialSelector for GenerateCredentials()
PiperOrigin-RevId: 501622339
2023-01-12 11:36:37 -08:00
Suet-Fei Li 084f7ebd88 Remove location namespace in third_party/nearby.
PiperOrigin-RevId: 500023196
2023-01-06 02:53:57 -08:00
Janusz Sobczak 337e1f41b0 Clarify CredentialStorage interface.
SaveCredentials does not to return the credentials that it has just saved. Returning a status will do.
Improved documentation.

PiperOrigin-RevId: 494280108
2022-12-09 15:41:12 -08:00
Janusz Sobczak a92abac83a Update advertisement encoder/decoder
1. Update the API to accept the credentials on input instead of credential manager.
2. Update the test with values using the LDT encryption.

These changes allow us to have a more asynchronous implementaion.
When broadcasting we can:
1. Fetch the private credentials asynchronously.
2. Create the advertisement and start broadcasting when the credentials have been fetched.

When scanning we can:
1. Fetch public credentials asynchronously.
2. Start scanning for advertisements.
3. Update the decoder when new credentials are fetched.

PiperOrigin-RevId: 493998041
2022-12-08 14:36:44 -08:00
Hai Shang 6871b9d5a6 Add initial impl for UpdateRemotePublicCredentials in CredentialManager.
PiperOrigin-RevId: 491458184
2022-11-28 15:24:26 -08:00
Janusz Sobczak 5faa395f24 Change enum PublicCredentialType to enum class.
PiperOrigin-RevId: 486243753
2022-11-04 15:26:34 -07:00
Anay Wadhera 8028821593 Switch to .pb.h and explicit conversions to std::string
PiperOrigin-RevId: 485942813
2022-11-03 12:31:18 -07:00
Janusz Sobczak bc9a6ec55b Use LDT for advertisement decryption.
We are still missing the real LDT implementation, so the code is linked with a
placeholder code that doesn't do the actual encryption.

PiperOrigin-RevId: 484596294
2022-10-28 12:37:48 -07:00
Janusz Sobczak 53c504be9d Use LDT for advertisement encryption.
We are still missing the real LDT implementation, so the code is linked with a
placeholder code that doesn't do the actual encryption.

We also needed to pass the `account_name` to credential manager to choose the
correct credentials.

PiperOrigin-RevId: 483801163
2022-10-25 16:09:17 -07:00
Anthony Rueda 1443f3a135 Implement get public & private credentials.
PiperOrigin-RevId: 478522128
2022-10-03 09:18:19 -07:00
Anthony Rueda fd59e9aede Consolidate credential_storage callback functions. Move all callback struct definitions in a central header file compiled as part of internal/platform/implementation:comm library.
PiperOrigin-RevId: 476186596
2022-09-22 13:46:47 -07:00
Xin He 4f599a0d3e Save generated credentials and make the callback
PiperOrigin-RevId: 472776321
2022-09-07 11:50:30 -07:00
Xin He e5c24b8b8a Add manager app ID into the APIs
PiperOrigin-RevId: 467757514
2022-08-15 14:11:15 -07:00
Xin He 123a2cfd18 Move credentials related proto from Prensence to internal
Replace PresenceIdentityType with proto

PiperOrigin-RevId: 467294239
2022-08-12 14:18:34 -07:00
Janusz Sobczak 8446944697 Hide internal code in implementation/
Refactoring change.

action_factory* -> implementation/action_factory*
broadcast_request* -> implementation/base_broadcast_request*
encryption* -> implementation/encryption*

Clean up build targets.

PiperOrigin-RevId: 466992367
2022-08-11 10:37:56 -07:00
Xin He 76d45f20db Replace encrypting metadata with CBC to AES.
Provide a new API to decrypt the device metadata inside a public credential

PiperOrigin-RevId: 466936093
2022-08-11 06:23:49 -07:00
Suet-Fei Li 55f20775d2 Fix internal flow
PiperOrigin-RevId: 466426960
2022-08-09 12:02:16 -07:00
hai007 0a8f1f1c39 Implement Credentials Generation APIs
PiperOrigin-RevId: 466389238
2022-08-09 09:56:54 -07:00