Como localizar código em um projeto no GitHub?

Eu conheço nada de Github e muito pouco de Git.

Estava olhando esse software:

Ao olhar ele, gostaria de obter alguns aprendizados:

(1) Como fazer uma janelinha como essas no GTK.

(2) Como gerar checksum SHA256 a partir de um arquivo

Sendo que não sei onde encontrar isso com facilidade. Eu tentei na pasta “src” do projeto, mas não é algo que consiga identificar facilmente.

Poderia, alguém com experiência, dar umas dicas?

Obrigado.

Bom, não conheço muito do GTK, mas nesse código aí, os códigos estão em src mesmo, sendo o main.c o arquivo principal, que chama todos os outros, conforme é solicitado.

Se quer fazer algo em GTK, acho mais interessante pegar os guias do próprio GTK e ir fazendo:

https://developer.gnome.org/guides

Obrigado pela resposta.

Seguirei sua recomendação. Quanto à parte de gerar checksum SHA 256 a partir de uma arquivo, consegue identificar facilmente?

Localizar uma função dentro do código fonte pode ser feito com relativa facilidade usando grep -Ri palavra_chave (ou rg do pacote ripgrep se você é fã da linguagem Rust) dentro da pasta do código fonte.

~/Build/gtkhash/src $ grep -Ri sha256
test.c: t(SHA256,     "", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
test.c: t(SHA256,    "The quick brown fox jumps over the lazy dog", "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592");
test.c: t(SHA256,
test.c: t(SHA256,
test.c: t(SHA256,
hash/hash-func.h:       (X) == HASH_FUNC_SHA256 || \
hash/hash-func.h:       HASH_FUNC_SHA256,
hash/hash-lib-glib.c:           case HASH_FUNC_SHA256: *type = G_CHECKSUM_SHA256; break;
hash/hash-lib-crypto.c:         case HASH_FUNC_SHA256:   return EVP_sha256();
hash/hash-lib-linux.c:          case HASH_FUNC_SHA256:    return "sha256";
hash/hash-func.c:       [HASH_FUNC_SHA256]     = { "SHA256",       32,  64, },
hash/hash-lib-mbedtls.c:                case HASH_FUNC_SHA256:
hash/hash-lib-mbedtls.c:                        *type = MBEDTLS_MD_SHA256;
hash/hash-lib-gcrypt.c:         case HASH_FUNC_SHA256:    *algo = GCRY_MD_SHA256;       break;
hash/hash-lib-nettle.c:         case HASH_FUNC_SHA256:    *meta = &nettle_sha256;     break;
check.c:                        MATCH(".sha256", 7, SHA256);
check.c:                        MATCH(".sha256sum", 10, SHA256);
check.c:        gtk_file_filter_add_pattern(filter, "*.sha256");
check.c:        gtk_file_filter_add_pattern(filter, "*sha256sum*");
check.c:        gtk_file_filter_add_pattern(filter, "*SHA256SUM*");

Ignorando os arquivos de cima e baixo, que parecem ser testes, temos os conteúdos da pasta hash. Parece ser um pouco de areia demais para o caminhão de um novato, já que contém implementações usando quatro bibliotecas, e ele faz switches/ifs e etc. para reutilizar o código.

Uma das bibliotecas que ele utiliza aí é a GLib (que é uma dependência do GTK, então você teria que usar do mesmo jeito). Creio que a maneira mais simples de reproduzir a funcionalidade do aplicativo seria usando as funções de hash dela:

https://developer.gnome.org/glib/unstable/glib-Data-Checksums.htm

4 curtidas

Muito obrigado pela sua resposta.

No caso, uma das funcionalidades que irei querer é que, de alguma forma, eu consiga ler um arquivo, digamos “arquivo1.txt”, gerar o SHA256 dele e transformá-lo no nome “arquivo1.txt - checksum”. Sei que no terminal, facilmente se tira o SHA 256 de um arquivo.

No momento, usando bash(linguagem do terminal?) para fazer isso já seria útil, mas num futuro próximo só será se eu conseguir integrar o bash com o C ou outra linguagem.

rod@gentoo ~ $ sha256sum burst.exe 
ed82505ceed32158b508d8b74b0e36148eed2226b0d6a2e4f34d219614943070  burst.exe
rod@gentoo ~ $ sha256sum burst.exe > arquivo.txt
rod@gentoo ~ $ cat arquivo.txt 
ed82505ceed32158b508d8b74b0e36148eed2226b0d6a2e4f34d219614943070  burst.exe
rod@gentoo ~ $ sha256sum -c arquivo.txt 
burst.exe: SUCESSO
rod@gentoo ~ $ 

Olá @Deleterium. Agradeço a atenção.

Eu não entendi direito, mas creio que esse script pega o sha256 de um arquivo e joga em um .txt, correto?

Eu não queria exatamente isso. Gostaria de pegar o sha256 de um arquivo, digamos “nome_do_arquivo.pdf” e renomear o arquivo, deixando-o com o seguinte nome:

“nome_do_arquivo.pdf - ed82505ceed32158b508d8b74b0e36148eed2226b0d6a2e4f34d219614943070”

Você implementou alguma rotina em C ou em outra linguagem? Talvez seja mais fácil chamar o bash via outra linguagem… Eu vou começar a estudar isso amanhã.

Obrigado.

rod@gentoo ~/temp/asm $ ls
cc4.asm  d.asm  rbt.c
rod@gentoo ~/temp/asm $ mv -v cc4.asm "cc4.asm - $(sha256sum cc4.asm | cut -d' ' -f 1)"
renomeado 'cc4.asm' -> 'cc4.asm - 9e1cd1e86196214f9b3d974e22bba974790210f7802e57008cbd991ca62cdd4c'
rod@gentoo ~/temp/asm $ ls
'cc4.asm - 9e1cd1e86196214f9b3d974e22bba974790210f7802e57008cbd991ca62cdd4c'   d.asm   rbt.c
rod@gentoo ~/temp/asm $ 

Pra essas tarefas de renomear arquivo e fazer operações relativamente simples, o bash (ou sh ou qualquer outro shell) é a opção mais simples. O problema é que essa linguagem é pouco intuitiva e fica praticamente impossível aprender mexendo. Tem que assistir aula e ler manual.

Aliás indico a série do BASH do Blau Araújo, o cara é muito fera e ensina do zero ao profissional!

É essa playlist com 19 vídeos:
https://www.youtube.com/playlist?list=PLXoSGejyuQGpf4X-NdGjvSlEFZhn2f2H7

1 curtida

Agradeço a indicação. Irei assistir. Isso ser um bom primeiro passo na solução do problema que desejo abordar.

Quanto à implementação de código em C ou outra linguagem, fora bash, você já fez? Eu estou me “atrevendo” a fazer um programa que irá precisar gerar um arquivo de dados, e já aplicando o sha256 e renomeando-o. Creio que o mais aconselhável seja fazer isso na própria linguagem a ser usada.

Obrigado.

Se vc tem o conteúdo do arquivo dentro do programa, poderá adicional alguma biblioteca que calcule o hash. Daí vc passa o conteúdo, a função retorna o hash, e vc salva o arquivo com o nome+hash.

Já se vc tiver que carregar o conteúdo do arquivo pra passar pra biblioteca, talvez valha a pena executar o comando externo, mas não sou muito experiente nessa área.