blob: 499a3d087c4d1f7d91ed4f1dfdf4719a36a9e8f9 [file] [log] [blame]
// Copyright 2023, The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//! Wrappers of the Curve25519 related functions in BoringSSL curve25519.h.
use crate::util::check_int_result;
use bssl_avf_error::{ApiName, Result};
const ED25519_PUBLIC_KEY_LEN: usize = bssl_ffi::ED25519_PUBLIC_KEY_LEN as usize;
const ED25519_SIGNATURE_LEN: usize = bssl_ffi::ED25519_SIGNATURE_LEN as usize;
/// Verifies the signature of a message with the given ED25519 public key.
pub fn ed25519_verify(
message: &[u8],
signature: &[u8; ED25519_SIGNATURE_LEN],
public_key: &[u8; ED25519_PUBLIC_KEY_LEN],
) -> Result<()> {
// SAFETY: The function only reads the parameters within their bounds.
let ret = unsafe {
bssl_ffi::ED25519_verify(
message.as_ptr(),
message.len(),
signature.as_ptr(),
public_key.as_ptr(),
)
};
check_int_result(ret, ApiName::ED25519_verify)
}