L_DicomCreateSignature

# include“ltdic.h”

L_LTDIC_APIL_UINT16L_DicomCreateSignature (hDS, pItem, pszPrivateKeyFile, pszCertificateFile, pszPassword, ppSignatureItem, pszMacTransferSyntax, uMacAlgorithm, pElementsToSign, uCount, uSecurityProfile, uReserved);

在数据集中创建数字签名。

参数

HDICOMDShDS

一个DICOM句柄。

pDICOMELEMENTpItem

指向DICOMELEMENT结构,它指定数据集中项目序列中的一个项。数字签名将在此项目中创建。如果该参数设置为NULL,则将在主数据集中创建数字签名。

常量L_TCHAR* pszPrivateKeyFile

字符串,包含存储用于加密消息身份验证码(MAC)的私钥的文件名。该函数接受来自以下格式文件的私钥:

如果私钥是加密存储的,则使用参数pszPassword指定密码。

常量L_TCHAR* pszCertificateFile

字符串,包含存储签名者的数字证书的文件的名称。这将是签名者证书(0400,0115)。如果文件中存储了多个数字证书,则使用第一个数字证书。对于最后一种格式(PKCS#12),如果数字证书是加密存储的,则使用参数pszPassword指定密码。对于其他格式,该参数将被忽略。如果指定的私钥与数字证书的公钥不匹配,则该功能将失败。该函数接受来自以下格式文件的X.509数字证书:

价值 意义
PEM (通常是。pem,。cer,或。crt)
DER (通常是。cer或。crt)
PKCS # 7 PEM (通常是.pem)
PKCS # 7 DER (通常是。p7b或。spc)
PKCS # 12 (通常是pfx或p12)

常量L_TCHAR* pszPassword

私钥加密存储时使用的密码字符串。密码也将用于PKCS#12数字证书。如果不需要输入密码,则设置为NULL。

pDICOMELEMENT* ppSignatureItem

指向指向对象的指针DICOMELEMENT结构。如果成功,*ppSignatureItem将更新为指向新数字签名序列项的指针,该数字签名序列项对应于新创建的数字签名。该参数可以设置为NULL。

常量L_TCHAR* pszMacTransferSyntax

包含MAC计算传输语法UID(0400,0010)的字符串。这是MAC计算中包含的数据元素应该被编码的传输语法。该参数可以设置为NULL。有关更多细节,请参阅评论。

L_UINT16uMacAlgorithm

指定MAC算法(0400,0015)的值。这是用来生成MAC的算法。可能的值有:

价值 意义
DICOM_MAC_ALGORITHM_RIPEMD160 [0]推荐使用RIPEMD-160哈希函数。
DICOM_MAC_ALGORITHM_SHA1 [1]使用SHA-1哈希功能。
DICOM_MAC_ALGORITHM_MD5 [2]使用MD5哈希功能。

L_UINT32* pElementsToSign

指向包含要签名的数据元素的标签的数组的指针。数组中标签的数量由参数uCount给出。如果数字签名是在主数据集中创建的(pItem为NULL),则只有数据集根上的数据元素可以被标签引用。类似地,如果数字签名是在项目序列的项目中创建的,则只有该项下的数据元素可以被标签引用。该参数可以设置为NULL。有关更多细节,请参阅评论。

L_UINT32uCount

值,该值指定由参数pElementsToSign指定的数组中标签的数量。

L_UINT16uSecurityProfile

值,指定在创建数字签名时遵循的数字签名安全配置文件。可能取值为:

价值 意义
DICOM_SECURITY_PROFILE_NONE [0]不符合任何数字签名安全配置文件。
DICOM_SECURITY_PROFILE_BASE_RSA [1] RSA (Base Rivest-Shamir-Adleman)数字签名配置。
DICOM_SECURITY_PROFILE_CREATOR_RSA [2]符合Creator RSA数字签名配置文件。
DICOM_SECURITY_PROFILE_AUTHORIZATION_RSA [3]符合授权RSA数字签名配置文件。

有关更多细节,请参阅评论。

L_UINT16uReserved

保留以备将来使用。这必须设置为0。

返回

价值 意义
DICOM_SUCCESS 活动很成功。
< > DICOM_SUCCESS 发生错误。指返回代码

评论

数字签名可以在主数据集中创建,也可以在项序列中的项中创建。如果您想在主数据集中创建数字签名,或者在数据集中指定一个项目以在该项目中创建数字签名,则为参数pItem传递NULL。

参数pszMacTransferSyntax指定对消息验证码(MAC)计算中包含的数据元素进行编码的传输语法。此传输语法必须显式地包括值表示(显式VR),并且必须使用小端字节排序。如果指定的传输语法不满足此条件,则函数将表现为将参数设置为NULL。

如果pszMacTransferSyntax设置为NULL,函数将使用数据集当前编码的传输语法,如果该传输语法满足前一段中提到的条件。如果没有,函数将使用显式VR小端转移语法。

您可以使用参数pElementsToSign和uCount来指定新的数字签名所涵盖的数据元素。如果pItem设置为NULL,这些由它们的标签表示的数据元素必须在数据集的根上。如果pItem指定了一个Item,那么它们必须直接位于该Item下面。任何没有在预期位置指定现有数据元素的标记都将被忽略。同样,任何指定数据元素的标签如果不能按照标准进行签名,也会被忽略。

如果pElementsToSign被设置为NULL,或者uCount被设置为0,该函数将对所有根据标准可以签名的数据元素进行签名,并且这些数据元素存在于数据集的根目录中,如果pItem被设置为NULL,或者紧挨着pItem指定的Item之下。

数字签名安全配置文件增加了限制和规范。例如,RSA (Rivest-Shamir-Adleman)安全配置文件要求使用RSA加密。因此,如果使用了其中一个安全配置文件,而指定的密钥是DSA密钥,则该功能将失败。另一个例子是,创建者和授权RSA数字签名配置文件要求,如果存在某些数据元素,至少必须对其进行签名。因此,如果使用了这些安全配置文件中的一个,该函数将对所需的任何现有数据元素进行签名,即使该数据元素没有包含在pElementsToSign指定的数组中。

必需的dll和库

平台

Win32, x64

另请参阅

功能

主题

例子

L_INT DicomCreateSignatureExample(HDICOMDS){pDICOMELEMENT pSignatureItem;//在主数据集中创建一个数字签名L_UINT16 uRet = l_dicomcreatesignsignature (hDS,空,MAKE_IMAGE_PATH(文本("私钥样本。pem")),MAKE_IMAGE_PATH(文本(“CA.pem”)),空,&pSignatureItem,空,DICOM_MAC_ALGORITHM_RIPEMD160,空,0,DICOM_SECURITY_PROFILE_NONE,0);如果(uRet == DICOM_SUCCESS)对话框(NULL,文本(“数字签名已成功创建。”),文本(“样本”), MB_OK);其他的{L_TCHAR szMsg [64];wsprintf (szMsg文本("发生错误[错误:%hu]。"), uRet);消息框(NULL, szMsg, TEXT(“样本”), MB_OK);返回uRet;}//保存签名的数据集= L_DicomSaveDS(hDS,MAKE_IMAGE_PATH(TEXT(“Signed.dcm”)), 0);如果(uRet != DICOM_SUCCESS)返回uRet;//检查我们刚刚创建的数字签名//参数l_dicomverifsignature为例// function DicomVerifySignatureExampleuRet = (L_UINT16) DicomVerifySignatureExample(hDS, pSignatureItem);返回uRet;}
LEADTOOLS DICOM C API帮助
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2021领德科技有限公司版权所有。