#include <sys/socket.h>
#include <linux/if_alg.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
int main() {
int sockfd, opfd;
struct sockaddr_alg sa = {
.salg_family = AF_ALG,
.salg_type = "hash",
.salg_name = "sha1"
};
sockfd = socket(AF_ALG, SOCK_SEQPACKET, 0);
if (sockfd < 0) {
perror("socket");
return 1;
}
if (bind(sockfd, (struct sockaddr *)&sa, sizeof(sa)) < 0) {
perror("bind");
close(sockfd);
return 1;
}
opfd = accept(sockfd, NULL, 0);
if (opfd < 0) {
perror("accept");
close(sockfd);
return 1;
}
char data[] = "hello world";
write(opfd, data, strlen(data));
char hash[20];
read(opfd, hash, sizeof(hash));
printf("SHA1 hash computed\n");
close(opfd);
close(sockfd);
return 0;
}