📄 slp_auth.c
字号:
const SLPSAAdvert* saadvert)/* Verify authenticity of the specified SAAdvert *//* *//* Parameters: hspi (IN) open SPI handle *//* emptyisfail (IN) if non-zero, messages without authblocks *//* will fail *//* spistrlen (IN) length of the spi string *//* sprstr (IN) the spi string *//* saadvert (IN) the SAADVERT to verify *//* *//* Returns: 0 on success or SLP_ERROR_xxx code on failure *//*=========================================================================*/{ return 0;}/*=========================================================================*/int SLPAuthSignString(SLPSpiHandle hspi, int spistrlen, const char* spistr, unsigned short stringlen, const char* string, int* authblocklen, unsigned char** authblock)/* Generate an authblock signature for an attribute list *//* *//* Parameters: hspi (IN) open SPI handle *//* spistrlen (IN) length of the SPI string *//* spistr (IN) SPI to sign with *//* attrlistlen (IN) the length of the URL to sign *//* attrlist (IN) the url to sign *//* authblocklen (OUT) the length of the authblock signature *//* authblock (OUT) buffer containing authblock signature *//* must be freed by the caller */ /* *//* Returns: 0 on success or SLP_ERROR_xxx code on failure *//*=========================================================================*/{ int result; SLPCryptoDSAKey* key; unsigned char digest[20]; int defaultspistrlen = 0; char* defaultspistr = 0; /* NULL out the authblock and spistr just to be safe */ key = 0; *authblock = 0; *authblocklen = 0; spistr = 0; spistrlen = 0; /*--------------------------------*/ /* Get a private key for the SPI */ /*--------------------------------*/ if(spistr) { key = SLPSpiGetDSAKey(hspi, SLPSPI_KEY_TYPE_PRIVATE, spistrlen, spistr, &key); } else { if(SLPSpiGetDefaultSPI(hspi, SLPSPI_KEY_TYPE_PRIVATE, &defaultspistrlen, &defaultspistr)) { spistr = defaultspistr; spistrlen = defaultspistrlen; key = SLPSpiGetDSAKey(hspi, SLPSPI_KEY_TYPE_PRIVATE, spistrlen, spistr, &key); } } if(key == 0) { result = SLP_ERROR_AUTHENTICATION_UNKNOWN; goto ERROR; } /*--------------------------*/ /* Generate the SHA1 digest */ /*--------------------------*/ result = SLPAuthDigestString(spistrlen, spistr, stringlen, string, 0xffffffff, /* very long expiration (for now) */ digest); /*---------------------------------------------*/ /* Sign the digest and put it in the authblock */ /*---------------------------------------------*/ if(result == 0) { result = SLPAuthSignDigest(spistrlen, spistr, key, digest, authblocklen, authblock); }ERROR: /*---------*/ /* Cleanup */ /*---------*/ if(defaultspistr) xfree(defaultspistr); if(key) SLPCryptoDSAKeyDestroy(key); return result;}/*=========================================================================*/int SLPAuthSignUrl(SLPSpiHandle hspi, int spistrlen, const char* spistr, unsigned short urllen, const char* url, int* authblocklen, unsigned char** authblock)/* Generate an authblock signature for a Url *//* *//* Parameters: hspi (IN) open SPI handle *//* spistrlen (IN) length of the SPI string *//* spistr (IN) SPI to sign with *//* urllen (IN) the length of the URL to sign *//* url (IN) the url to sign *//* authblocklen (OUT) the length of the authblock signature *//* authblock (OUT) buffer containing authblock signature *//* must be freed by the caller *//* *//* Returns: 0 on success or SLP_ERROR_xxx code on failure *//*=========================================================================*/{ return SLPAuthSignString(hspi, spistrlen, spistr, urllen, url, authblocklen, authblock);}/*=========================================================================*/int SLPAuthSignDAAdvert(SLPSpiHandle hspi, unsigned short spistrlen, const char* spistr, unsigned long bootstamp, unsigned short urllen, const char* url, unsigned short attrlistlen, const char* attrlist, unsigned short scopelistlen, const char* scopelist, unsigned short daspistrlen, const char* daspistr, int* authblocklen, unsigned char** authblock)/* Generate an authblock signature for a DAADVERT *//* *//* Parameters: hspi (IN) open SPI handle *//* spistrlen (IN) length of the spi string *//* sprstr (IN) the spi string *//* bootstamp (IN) the statless DA boot timestamp *//* urllen (IN) the length of the URL to sign *//* url (IN) the url to sign *//* attrlistlen (IN) the length of the URL to sign *//* attrlist (IN) the url to sign *//* scopelistlen (IN) the length of the DA's scope list *//* scopelist (IN) the DA's scope list *//* daspistrlen (IN) the length of the list of DA's SPIs *//* daspistr (IN) the list of the DA's SPI's *//* authblocklen (OUT) the length of the authblock signature *//* authblock (OUT) buffer containing authblock signature must *//* be freed by the caller *//* *//* Returns: 0 on success or SLP_ERROR_xxx code on failure *//*=========================================================================*/{ int result; SLPCryptoDSAKey* key; unsigned char digest[20]; int defaultspistrlen = 0; char* defaultspistr = 0; /* NULL out the authblock and spistr just to be safe */ key = 0; *authblock = 0; *authblocklen = 0; spistr = 0; spistrlen = 0; /*--------------------------------*/ /* Get a private key for the SPI */ /*--------------------------------*/ if(spistr) { key = SLPSpiGetDSAKey(hspi, SLPSPI_KEY_TYPE_PRIVATE, spistrlen, spistr, &key); } else { if(SLPSpiGetDefaultSPI(hspi, SLPSPI_KEY_TYPE_PRIVATE, &defaultspistrlen, &defaultspistr)) { spistr = defaultspistr; spistrlen = defaultspistrlen; key = SLPSpiGetDSAKey(hspi, SLPSPI_KEY_TYPE_PRIVATE, spistrlen, spistr, &key); } } if(key == 0) { result = SLP_ERROR_AUTHENTICATION_UNKNOWN; goto ERROR; } /*--------------------------*/ /* Generate the SHA1 digest */ /*--------------------------*/ result = SLPAuthDigestDAAdvert(spistrlen, spistr, 0xffffffff, bootstamp, urllen, url, attrlistlen, attrlist, scopelistlen, scopelist, daspistrlen, daspistr, digest); /*---------------------------------------------*/ /* Sign the digest and put it in the authblock */ /*---------------------------------------------*/ if(result == 0) { result = SLPAuthSignDigest(spistrlen, spistr, key, digest, authblocklen, authblock); }ERROR: /*---------*/ /* Cleanup */ /*---------*/ if(defaultspistr) xfree(defaultspistr); if(key) SLPCryptoDSAKeyDestroy(key); return result;}/*=========================================================================*/int SLPAuthSignSAAdvert(unsigned short spistrlen, const char* spistr, unsigned short urllen, const char* url, unsigned short attrlistlen, const char* attrlist, unsigned short scopelistlen, const char* scopelist, int* authblocklen, unsigned char** authblock)/* Generate an authblock signature for a SAADVERT *//* *//* Parameters: spistrlen (IN) length of the spi string *//* sprstr (IN) the spi string *//* urllen (IN) the length of the URL to sign *//* url (IN) the url to sign *//* attrlistlen (IN) the length of the URL to sign *//* attrlist (IN) the url to sign *//* scopelistlen (IN) the length of the DA's scope list *//* scopelist (IN) the DA's scope list *//* authblocklen (OUT) the length of the authblock signature *//* authblock (OUT) buffer containing authblock signature *//* *//* Returns: 0 on success or SLP_ERROR_xxx code on failure *//*=========================================================================*/{ *authblocklen = 0; *authblock = 0; return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -